
ユカイ、ツーカイ、カイハツ環境!(13)
究極の問題解析ツール、逆コンパイラJD-Eclipseとは
岡本 隆史
2010/3/8
やってみよう! 自動逆コンパイル
JD-Eclipseの利用方法は非常に簡単です。Eclipseのプロジェクト内のjarファイル内のクラスやクラスパス上のクラスをクリックした際に、ソースコードが存在しない場合、自動的に逆コンパイルされ、ソースコードが表示されます(図2)。
![]() |
| 図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で逆コンパイルしたコードを見る例(画像をクリックすると、拡大します) |
アプリケーションをデバッグ中は、スレッドで実行中のクラスの行番号は、逆コンパイルされたコード中のコメントに記述された行番号に対応しているので、実行中の場所を確認できます。
ただし、実行位置を表す矢印は、実際の実行中の位置とずれているので、注意してください。
逆コンパイルされたコード中の変数の値などはそのまま見ることができ、普通にデバッグできます。
トラブル解析に究極の力を発揮
ご紹介したとおり、JD-Eclipseを使えば、ソースコードがなく、それ以上追跡できない場合でも、デバッガと組み合わせることで簡単に挙動を追跡できます。
また、ソースコードがある場合でも、そのソースコードを探したりEclipseへ設定する手間が省けます。さらにプロファイラなどと組み合わせると、トラブル解析に究極の力を発揮します。ぜひ一度使ってみることをお勧めします。
■ @IT関連記事
| Java開発の問題解決を助ける バグ、性能問題、メモリリークなど、Java開発における問題は多い。これらの解決を助けるツールの活用法を紹介する |
| 現場にキく、Webシステムの問題解決ノウハウ 本連載は、日立製作所が提供するアプリケーションサーバ「Cosminexus」の開発担当者へのインタビューを通じて、Webシステムにおける、さまざまな問題/トラブルの解決に効くノウハウや注意点を紹介していく。現在起きている問題の解決や、今後の開発のご参考に 第1回 Java EEサーバからレスポンス返らず。何から調べる? 第2回 WebアプリのHTML/画像表示を速くする3つの方法 第3回 Webの表示速度を遅くする「SSLハンドシェイク」とは |
1-2 |
| Index | ||||||
|
||||||
ユカイ、ツーカイ、カイハツ環境! バックナンバー 連載インデックスへ»
- 第1回 Trac Lightningで始めるチケット式開発「電撃」入門
- 第2回 SubversionとTracでファイル管理の“迷宮”から脱出
- 第3回 分散バージョン管理Git/Mercurial/Bazaar徹底比較
- 第4回 Aptanaなら開発環境とクラウドの連携が超お手軽!
- 第5回 App Engine/AptanaなどJavaクラウド4つを徹底比較
- 第6回 Eclipse 3.5 Galileoの「実に面白い」新機能とは
- 第7回 ブラウザを選ばずWebテストを自動化するSelenium
- 第8回 JUnit/FindBugs/PMDなどを総観できるQALab/Limy
- 第9回 Googlerも使っているIntelliJ IDEAのOSS版を試す
- 第10回 Webのバグを燃やしまくるFirebugと、そのアドオン7選
- 第11回 DB設計の神ツール「ERMaster」なら、ここまでできる
- 第12回 AWS ToolkitでTomcatクラスタをEC2上に楽々構築
- 第13回 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
- 第14回 AzureのストレージをJavaで扱えるWindowsAzure4j
- 第15回 Java EE 6/Tomcat 7/Gitに対応したEclipse 3.6
- 第16回 単体テストを“神速”化するQuick JUnitとMockito
- 第17回 コード探知機「Sonar」でプロジェクトの深海を探れ!
- 第18回 Team Foundation ServerでJava開発は大丈夫か?
- 第19回 Review Boardならコードレビューを効率良くできる!
- 第20回 Bazaarでござ〜る。猿でもできる分散バージョン管理
- 第21回 「Hudson」改め「Jenkins」で始めるCI入門
- 第22回 Ant使いでもMavenのライブラリ管理ができるIvyとは
- 第23回 AWSの自由自在なPaaS「Elastic Beanstalk」とは
- 第24回 Eclipse 3.7 Indigo公開、e4、Orion、そしてクラウドへ
- 第25回 Java開発者が知らないと損するPaaSクラウド8選
- 第26回 Git管理の神ツール「Gitolite」なら、ここまでできる!
- 第27回 アジャイル管理ツール9選+Pivotal Tracker入門
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


![図3 [デバッグ]パースペクティブでJD-Eclipseで逆コンパイルしたコードを見る例](03.gif)