やってみよう! 自動逆コンパイル
JD-Eclipseの利用方法は非常に簡単です。Eclipseのプロジェクト内のjarファイル内のクラスやクラスパス上のクラスをクリックした際に、ソースコードが存在しない場合、自動的に逆コンパイルされ、ソースコードが表示されます(図2)。
また、ソースコード中のメソッドから宣言を開いたり、コンソール中に表示されたスタックトレースをクリックしたり、デバッガ中のスレッドからクラスをクリックしても自動的に逆コンパイルできます。
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)。
アプリケーションをデバッグ中は、スレッドで実行中のクラスの行番号は、逆コンパイルされたコード中のコメントに記述された行番号に対応しているので、実行中の場所を確認できます。
ただし、実行位置を表す矢印は、実際の実行中の位置とずれているので、注意してください。
逆コンパイルされたコード中の変数の値などはそのまま見ることができ、普通にデバッグできます。
トラブル解析に究極の力を発揮
ご紹介したとおり、JD-Eclipseを使えば、ソースコードがなく、それ以上追跡できない場合でも、デバッガと組み合わせることで簡単に挙動を追跡できます。
また、ソースコードがある場合でも、そのソースコードを探したりEclipseへ設定する手間が省けます。さらにプロファイラなどと組み合わせると、トラブル解析に究極の力を発揮します。ぜひ一度使ってみることをお勧めします。
- exe/dmgしか知らない人のためのインストール/パッケージ管理/ビルドの基礎知識
- これでGitも怖くない! GUIでのバージョン管理が無料でできるSourceTreeの7つの特徴とは
- DevOps時代の開発者のためのOSSクラウド運用管理ツール5選まとめ
- GitHubはリアルRPG? そして、ソーシャルコーディングへ
- ついにメジャーバージョンUP! Eclipse 4.2の新機能7選
- いまアツいアジャイルプロジェクト管理ツール9選+Pivotal Tracker入門
- Git管理の神ツール「Gitolite」なら、ここまでできる!
- Java開発者が知らないと損するPaaSクラウド8選
- Eclipse 3.7 Indigo公開、e4、Orion、そしてクラウドへ
- AWSの自由自在なPaaS「Elastic Beanstalk」とは
- Ant使いでもMavenのライブラリ管理ができるIvyとは
- 「Hudson」改め「Jenkins」で始めるCI(継続的インテグレーション)入門
- Bazaarでござ〜る。猿でもできる分散バージョン管理“超”入門
- Review Boardならコードレビューを効率良くできる!
- Team Foundation ServerでJava開発は大丈夫か?
- コード探知機「Sonar」でプロジェクトの深海を探れ!
- 単体テストを“神速”化するQuick JUnitとMockito
- Java EE 6/Tomcat 7/Gitに対応したEclipse 3.6
- AzureのストレージをJavaで扱えるWindowsAzure4j
- 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
- AWS ToolkitでTomcatクラスタをAmazon EC2上に楽々構築
- DB設計の神ツール「ERMaster」なら、ここまでできる
- Webのバグを燃やしまくるFirebugと、そのアドオン7選
- Googlerも使っているIntelliJ IDEAのOSS版を試す
- JUnit/FindBugs/PMDなどを総観できるQALab/Limy
- ブラウザを選ばずWebテストを自動化するSelenium
- Eclipse 3.5 Galileoの「実に面白い」新機能とは
- App Engine/AptanaなどJavaクラウド4つを徹底比較
- Aptanaなら開発環境とクラウドの連携が超お手軽!
- 分散バージョン管理Git/Mercurial/Bazaar徹底比較
- SubversionとTracでファイル管理の“迷宮”から脱出
- Trac Lightningで始めるチケット式開発「電撃」入門
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Java開発の問題解決を助ける
- 現場から学ぶWebアプリ開発のトラブルハック
- 第1回 Java EEサーバからレスポンス返らず。何から調べる?
現場にキく、Webシステムの問題解決ノウハウ - 第2回 WebアプリのHTML/画像表示を速くする3つの方法
現場にキく、Webシステムの問題解決ノウハウ - 第3回 Webの表示速度を遅くする「SSLハンドシェイク」とは
現場にキく、Webシステムの問題解決ノウハウ - 事例に学ぶWebシステム開発のワンポイント