60

サードパーティ ライブラリのクラスで NullPointerException を取得しています。ここで、全体をデバッグしたいと思います。クラスがどのオブジェクトから保持されているかを知る必要があります。しかし、サードパーティのクラスにブレークポイントを設定できないようです。

誰かが私のトラブルから抜け出す方法を知っていますか? もちろん、IDE として Eclipse を使用しています。

更新: ライブラリはオープンソースです。

4

7 に答える 7

65

ソースがなくても、サードパーティ ライブラリにメソッド ブレークポイントを簡単に設定できます。クラスを開くだけです (「i-have-no-source」ビューが表示されます)。アウトラインを開き、目的のメソッドを右クリックして をクリックしToggle Method Breakpoint、メソッド ブレークポイントを作成します。

于 2008-12-16T09:45:05.857 に答える
36

これを行う(そして実際に役立つものになってしまう)最も確実な方法は、ソースをダウンロードし(オープンソースであると言う)、そのソースを指す別の「Javaプロジェクト」をセットアップすることです。

これを行うには、ソースをダウンロードして、システムのどこかで解凍します。「ファイル」->「新規」->「Javaプロジェクト」をクリックします。次のダイアログで、プロジェクト名を付けて、[既存のソースからプロジェクトを作成]を選択します。オープンソースライブラリのルートの場所を参照します。

プロジェクトに必要なすべての追加ライブラリなどがダウンロードしたプロジェクトに含まれているとすると、Eclipseはすべてを把握し、ビルドパスを設定します。

プロジェクトのビルドパスからオープンソースjarを削除し、この新しいプロジェクトをプロジェクトのビルドパスに追加する必要があります。

これで、これをコードとして扱い、自由にデバッグできます。

これにより、他のアプローチで少なくとも2つの問題が回避されます。

  1. jarファイルに「ソースを添付」することはできますが、jarファイルがデバッグ情報なしでコンパイルされた場合でも、これは機能しません。jarファイルがデバッグ情報を使用してコンパイルされた場合(lines,source,vars... http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javac.htmlおよび-gオプションを参照)。

  2. 「例外ブレークポイント」を追加して、NullPointerExceptionがいつ発生するかを確認できますが、これは一般的な例外であり、探しているものよりも何回も(数百?)前に発生して処理される可能性があります。さらに、元のソースがないと、NullPointerExceptionをスローしているコードについて実際に何も見ることができません-何が悪いのかを理解できる可能性はかなり低いです。

于 2008-12-16T20:39:51.323 に答える
7

特定の例外にブレークポイントを設定することもできます。デバッグの観点から、「Java例外ブレークポイントの追加」ボタンがあり、そこに「NullPointerException」を追加できます。このような例外が発生するとすぐに、デバッガーは実行を一時停止します。

于 2008-12-16T10:29:51.773 に答える
1

通常、ブレークポイントを設定できるはずです。特にサードパーティのライブラリがオープンソースの場合。ただし、サードパーティのライブラリが商用ベンダーのものである場合は、デバッグフラグをオフにしてソースをコンパイルしている可能性があります。これにより、デバッグが不可能になります。ベンダーは、ライブラリをリバースエンジニアリングできないようにするための難読化プロセスの一部として、または単に最終的にコンパイルされたクラスが小さくなるために、これを行った可能性があります。

于 2008-12-16T10:25:20.907 に答える
0

ソースを添付 (またはソース jar を自動的に添付するものを使用) し、関心のある行の左側をダブルクリックして、通常の方法でブレークポイントを設定します。

于 2012-09-28T12:26:07.127 に答える