ユカイ、ツーカイ、カイハツ環境!
連載インデックスへ
ユカイ、ツーカイ、カイハツ環境!(13)

究極の問題解析ツール、逆コンパイラJD-Eclipseとは


岡本 隆史
2010/3/8


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

 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へ設定する手間が省けます。さらにプロファイラなどと組み合わせると、トラブル解析に究極の力を発揮します。ぜひ一度使ってみることをお勧めします。

@IT関連記事


Java開発の問題解決を助ける
バグ、性能問題、メモリリークなど、Java開発における問題は多い。これらの解決を助けるツールの活用法を紹介する
現場から学ぶWebアプリ開発のトラブルハック
現場でのエンジニアの経験から得られた、APサーバをベースとしたWebアプリ開発における注意点やノウハウについて解説するハック集
第1回 Webアプリの問題点を「見える化」する7つ道具
第2回 “Stop the World”を防ぐコンカレントGCとは?
第3回 【実録ドキュメント】そのログ本当に必要ですか?
第4回 DBアクセスのトラブルは終盤で発覚しがち……
第5回 OutOfMemoryエラー発生!? GCがあるのに、なぜ?
第6回 【真夏の夜のミステリー】Tomcatを殺したのは誰だ?
第7回 【トラブル大捜査線】失われたコネクションを追え!
第8回 肥え続けるTomcatと胃を痛めるトラブルハッカー
第9回 JavaのGC頻度に惑わされた年末年始の苦いメモリ
第10回 ThreadとHashMapに潜む無限回廊は実に面白い?
第11回 スレッドダンプの森で覚えた死のロックへの違和感
第12回 アプリ開発でも、よ〜く考えよう。キャッシュは大事だよ
第13回 DB操作の“壁”を壊すJPAが起こした「赤壁の戦い」
現場にキく、Webシステムの問題解決ノウハウ
本連載は、日立製作所が提供するアプリケーションサーバ「Cosminexus」の開発担当者へのインタビューを通じて、Webシステムにおける、さまざまな問題/トラブルの解決に効くノウハウや注意点を紹介していく。現在起きている問題の解決や、今後の開発のご参考に
第1回 Java EEサーバからレスポンス返らず。何から調べる?
第2回 WebアプリのHTML/画像表示を速くする3つの方法
第3回 Webの表示速度を遅くする「SSLハンドシェイク」とは
事例に学ぶWebシステム開発のワンポイント
現場のエンジニアの経験から得られた、アプリケーション・サーバをベースとしたWebシステム開発におけるノウハウ、注意点について解説
第1回 クラスタ化すると遅くなる?
第2回 キャッシュが性能劣化をもたらす謎を解く
第3回 クラスタは何台までOK?
第4回 マルチスレッドのいたずらに注意
第5回 クラスタによるアプリケーションの動的アップデート
第6回 APサーバからの応答がなくなった、なぜ?
第7回 低負荷なのにCPU使用率が100%?
第8回 文字化け“???”の法則とその防止策
第9回 メモリは足りているのに“OutOfMemory”のなぞ
第10回 レスポンスキャッシュでパフォーマンス向上
第11回 JDBC接続を高速化−PreparedCacheの活用
第12回 ブラウザキャッシュでパフォーマンス向上
第13回 ファイルアップロード/ダウンロードに潜むわな

1-2

 Index
第13回 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
  Page1
ソースコードがなくても大丈夫?
JD-Eclipseは、Java 5以降に対応! しかも自動!!
注意! 「商用ソフトウェアの場合は、そのライセンスを確認」
注意! 「JadClipseなどはアンイストールしておこう」
Page2
やってみよう! 自動逆コンパイル
逆コンパイルされたソースコードは、どうなっている?
デバッガと組み合わせると、真価を発揮
トラブル解析に究極の力を発揮

ユカイ、ツーカイ、カイハツ環境! バックナンバー 連載インデックスへ»



Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH