プログラムをそれなりにやっている人であれば
それなりに知っていると思われる
逆コンパイル
自分もプログラムを始めてからそれなりの期間が経つけれど(仕事ではやってないけど…)
この方一回もやったことがなかった。
ということでやってみた。
勿論対象の言語はJava
Jadというツール?を使うと簡単に出来てしまうということで、
その再現性を確認してみた。
[逆コンパイル対象のJavaファイル]
public class HelloWorld {
/** こんにちはの静的変数 */
private static String str2 = "good afternoon!";
public static void main(String[] args) {
String str1 = "Hello World!";
// 「こんにちは」を表示します。
System.out.println(str1);
// 「こんにちは」を表示します。
System.out.println(str2);
}
}
[逆コンパイル後のJadファイル]
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: HelloWorld.java
import java.io.PrintStream;
public class HelloWorld
{
public HelloWorld()
{
}
public static void main(String args[])
{
String str1 = "Hello World!";
System.out.println(str1);
System.out.println(str2);
}
private static String str2 = "good afternoon!";
}
どうやらコメントは再現出来ないけれど、
変数名や処理は結構な感じでそのまま再現される。
こりゃすごい。
ちなみにJadのサイトはここ
http://www.varaneckas.com/jad
前回Slim3でのエラーハンドリングについて書きましたが、
前回書いた内容だと、エラー時にエラーを表示せずに、特定の画面を表示することはできるものの
エラーの内容がサッパリになってしまいます。
エラーの内容も知るべきだねという時に
スタックトレースを文字列でLogに出力します。
private final static Logger LOG = Logger.getLogger(Hoge.class.getName());
protected Navigation handleError(Throwable error) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
error.printStackTrace(pw);
LOG.log(Level.WARNING,sw.toString());
return redirect("/error.jsp");
}
とりあえずこんな感じで出力出来ます。
上記だと出力レベルはERRORではなくWARNINGなのでお気を付けを。
ちなみにLOGに設定されているclass名がHogeなので、
使用する場合は実際のclass名に応じて変えて下さい。
前回書いた内容だと、エラー時にエラーを表示せずに、特定の画面を表示することはできるものの
エラーの内容がサッパリになってしまいます。
エラーの内容も知るべきだねという時に
スタックトレースを文字列でLogに出力します。
private final static Logger LOG = Logger.getLogger(Hoge.class.getName());
protected Navigation handleError(Throwable error) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
error.printStackTrace(pw);
LOG.log(Level.WARNING,sw.toString());
return redirect("/error.jsp");
}
とりあえずこんな感じで出力出来ます。
上記だと出力レベルはERRORではなくWARNINGなのでお気を付けを。
ちなみにLOGに設定されているclass名がHogeなので、
使用する場合は実際のclass名に応じて変えて下さい。
作成しているWebサイトも、
そろそろそれなりに出来てきているなというところ。
それなりにバグも潰して、エラーが出なくなってきたものの、
ゼロにはならないんだよね。
そんな時、今のままだとエラーが送出された時に
爽快(?)にエラーのスタックトレースが表示される。
これはなんとかしなきゃなーというところで、
Slim3ではrunメソッドでデフォルトでthrows Exceptionをしているので、
こいつを何とかしようというところ。
調べてみると、
handleErrorというメソッドを@Overrideすると、
画面にエラーが表示されるのを避けられるみたい。
とても参考になったところで
あおうさ@日記さんのページ
http://d.hatena.ne.jp/bluerabbit/20090606/1244301504
ここを見れば大体OKじゃないかな。
難しい事がよくわからなかったら、
とりあえずエラーハンドリングしたいControllerクラスに
@Override
protected Navigation handleError(Throwable error) {
return redirect("/");
}
と書いておけばエラー時にルートのページに遷移するようになる。
そろそろそれなりに出来てきているなというところ。
それなりにバグも潰して、エラーが出なくなってきたものの、
ゼロにはならないんだよね。
そんな時、今のままだとエラーが送出された時に
爽快(?)にエラーのスタックトレースが表示される。
これはなんとかしなきゃなーというところで、
Slim3ではrunメソッドでデフォルトでthrows Exceptionをしているので、
こいつを何とかしようというところ。
調べてみると、
handleErrorというメソッドを@Overrideすると、
画面にエラーが表示されるのを避けられるみたい。
とても参考になったところで
あおうさ@日記さんのページ
http://d.hatena.ne.jp/bluerabbit/20090606/1244301504
ここを見れば大体OKじゃないかな。
難しい事がよくわからなかったら、
とりあえずエラーハンドリングしたいControllerクラスに
@Override
protected Navigation handleError(Throwable error) {
return redirect("/");
}
と書いておけばエラー時にルートのページに遷移するようになる。