連載
» 2010年03月08日 00時00分 公開

究極の問題解析ツール、逆コンパイラJD-Eclipseとはユカイ、ツーカイ、カイハツ環境!(13)(2/2 ページ)

[岡本隆史,@IT]
前のページへ 1|2       

やってみよう! 自動逆コンパイル

 JD-Eclipseの利用方法は非常に簡単です。Eclipseのプロジェクト内のjarファイル内のクラスやクラスパス上のクラスをクリックした際に、ソースコードが存在しない場合、自動的に逆コンパイルされ、ソースコードが表示されます(図2)。

図2 JD-Eclipseによるコードの逆コンパイル 図2 JD-Eclipseによるコードの逆コンパイル(画像をクリックすると、拡大します)

 また、ソースコード中のメソッドから宣言を開いたり、コンソール中に表示されたスタックトレースをクリックしたり、デバッガ中のスレッドからクラスをクリックしても自動的に逆コンパイルできます。

 Eclipse上のクラスからソースコードへジャンプする操作を行うだけで、自動的に逆コンパイルとソースコードの表示を行うので、クラスファイルであることを忘れるように自然に逆コンパイルしたソースコードを表示できます。

逆コンパイルされたソースコードは、どうなっている?

 JD-Eclipseを利用すると、あまりにも自然に逆コンパイルされるため、逆コンパイルされたソースコードであることを忘れそうですが、JD-Eclipseにより逆コンパイルされたソースコードには、最後に逆コンパイルしたクラスの情報が記述されます。

/* Location:           C:\usr\pleiades\workspace\test\lib\mylibrary.jar
 * Qualified Name:     org.ultimania.compiled.Test
 * Java Class Version: 6 (50.0)
 * JD-Core Version:    0.5.3
 */

 また、ステートメントの元のソースコード上の行数を示すコメントが挿入されます。

/* 16 */     l.add("1");
/* 17 */     l.add("2");
/* 18 */     l.add("3");
/* 19 */     for (Iterator localIterator = l.iterator(); localIterator.hasNext(); ) { Object i = localIterator.next();
/* 20 */       System.out.println(i);
/*    */     }

 例えば、「/* 16 */」の行は、もともとのソースコードの16行目に記述されていたコードであることを示します。デバッグするときのスタックトレース情報やスレッドダンプした行数から逆コンパイルされたコード上の場所を特定できます。

デバッガと組み合わせると、真価を発揮

 JD-Eclipseはデバッガと組み合わせたときに、その真価を発揮します(図3)。

図3 [デバッグ]パースペクティブでJD-Eclipseで逆コンパイルしたコードを見る例 図3 [デバッグ]パースペクティブでJD-Eclipseで逆コンパイルしたコードを見る例(画像をクリックすると、拡大します)

 アプリケーションをデバッグ中は、スレッドで実行中のクラスの行番号は、逆コンパイルされたコード中のコメントに記述された行番号に対応しているので、実行中の場所を確認できます。

 ただし、実行位置を表す矢印は、実際の実行中の位置とずれているので、注意してください。

 逆コンパイルされたコード中の変数の値などはそのまま見ることができ、普通にデバッグできます。

トラブル解析に究極の力を発揮

 ご紹介したとおり、JD-Eclipseを使えば、ソースコードがなく、それ以上追跡できない場合でも、デバッガと組み合わせることで簡単に挙動を追跡できます。

 また、ソースコードがある場合でも、そのソースコードを探したりEclipseへ設定する手間が省けます。さらにプロファイラなどと組み合わせると、トラブル解析に究極の力を発揮します。ぜひ一度使ってみることをお勧めします。


「ユカイ、ツーカイ、カイハツ環境!」バックナンバー
前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。