2009-05-13 16 views
15

Javaの設定ブレークポイントはどのように機能しますか? ソースファイル名と行番号のみに基づいていますか?クラスやメソッドの名前も表示されますか?Javaのブレークポイントの設定

デバッガに古いバージョンのソースがあり、ブレークポイントを設定している場合、ステップ実行するとカーソルはオフになります。どのくらい離れていますか?それは間違った方法(またはそのファイルに複数のクラスがある場合は間違ったクラスさえ)に入ることができますか?

JVMに同じ名前のクラスが複数ある場合(クラスローダーが複数ある場合はどうなるでしょう)彼らはすべてブレークポイントを取得しますか?

Webアプリケーションコンテナで、1つのWebアプリケーションだけにブレークポイントを設定できますか?

これはどれくらいのIDE固有のもので、JVMが提供するデバッグインタフェースによってどれだけ決定されますか?例:Eclipseでは、変数の値に基づいて条件付きブレークポイントを設定できます。それは、JVMの無条件ブレークポイントでEclipseが行うフィルタリングだけですか?

+0

私は実際にあなたがここでより多くのIDEを特定する必要があると思います。 –

+0

すべてのIDEがJVMと同じデバッガインタフェースを使用しているわけではありませんか? – Thilo

答えて

13

異なる種類のブレークポイントがあります。いくつかのブレークポイントは行ベースであり、いくつかはブレークポイントではありません。これがあなたの実際のデバッグにどのように影響を与えるかは、IDEが実際に何をするかによって異なります。たとえば、Eclipseでは、メソッドの途中にブレークポイントを追加すると、それが行ベースのブレークポイントになります。メソッドのシグネチャを含む行にブレークポイントを追加すると、メソッドのブレークポイントになります。

あなたが見ているソースコードが、実行中のクラスの正確なソースでない場合、行ブレークポイントはコースの右の行にマップされません。だから、あなたが意図した行にjavaが止まらないかもしれません。あなたのIDEは間違った方法や間違ったクラスを表示している可能性があります。 しかし、メソッドが定義された行が変更されたとしても、メソッド入力ブレークポイントは動作します(適切な時点で停止します)。 IDEがデバッガに間違った行を表示することがあります。 (そしてクラスローディングのような他の種類のイベント/ブレークポイントもあります...内部についてもっと知りたい場合はEventRequestのサブインターフェースを見てください)。

その他の質問に答えるには、ブレークポイントがJVMのすべてのクラスローダーに適用されます。

6

JVMはデバッグ用の標準API(Java Platform Debugger Architectureを参照)をサポートしています。すべてのIDEはJPDAを使用して、ブレークポイントの設定や計算式のすべての処理を行います。 IDEはすばらしいユーザーインターフェイスで「ただ」まとめています。

ブレークポイントを設定すると、IDEはJVMのツールインターフェイス(JDPAの一部)と通信し、ソースファイルとブレークポイントの行番号を与えます。 JVMには、ブレークポイントの物理的な位置を、クラスのコンパイル済みコード内のJavaステートメントの実際の位置にマップするために必要な情報があります。 JVMがブレークポイントに到達すると、JVMはそのスレッドの実行を停止し、ブレークポイントのソースファイルと行番号をIDEに通知します。 IDEによって場所が表示されます。

私がデバッグするときに、問題を修正するために行を追加または削除し、次の問題に進むことがあります。しかし、ブレークポイントは私が予想していたよりも早く遅くなっているように見えます。新しいブレークポイントを設定すると、実際にソースラインにはないので、私はそれらを設定します。この場合、プログラムを再起動すると、IDEとJVMの両方が再び整合性が取れます。

関連する問題