1. ホーム
  2. eclipse

Eclipseプロジェクトにファントムデバッガーブレークポイントがあるのはなぜですか?

2023-11-04 22:14:39

質問

小さなプロジェクトを持っていますが、Eclipse デバッガーで実行すると、ファイルが開かれる FileInputStream.class の 106 行目で常に停止するようです。 ブレークポイントは設定されていませんが、Eclipse は、ここにブレークポイントがあるかのように正確に動作します。 私がすべてのブレークポイントをクリアしても、それはまだ起こります。

同じ Eclipse ワークスペースに、この問題に悩まされない、はるかに大きな 2 番目のプロジェクトがあります。

小さい方のプロジェクトを、Europa Eclipse で開発しこの問題があった古い Linux マシンから、新しい Windows マシンに移動したところ、Ganymede Eclipse で引き続きこの問題が発生しました。 この問題は、OSやEclipseのバージョンに関係なく続いていますが、どうやらプロジェクトには関係ないようです。 理解できない このプロジェクトのディレクトリ内のすべてのファイルをグリップしましたが、FileInputStream で停止するように Eclipse に指示するファイルである可能性のあるものは見つかりませんでした。


さらなる情報 これは FileInputStream の 106 行目から呼び出されたネイティブコードから投げられた FileNotFoundException に対する Exception ブレークポイントのようです。 しかし、繰り返しになりますが、私はブレークポイントを全く設定していないように見えます。 Exception ブレークポイントはどこか他の場所で定義されているのでしょうか?

どのように解決するのですか?

選択解除を行いましたか?

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions

? (として このスレッドで言及されている など)

なぜEclipseはそのように動作するのですか?

それは 2002年までさかのぼる で、ブレークポイント オブジェクトの階層が取り除かれました。

古い API では、ブレークポイントを設定するために、クライアントは Java モデル オブジェクトを必要としていました。 IType , IField など。

新しいAPIでは、デバッグモデルで必要なのは型名、フィールド名などです。

これにより、クライアントはJava Model Objectsが利用できないときにブレークポイントを設定することができます。

クライアントはブレークポイントを関連付けるリソースを指定できるようになりました(以前は関連する Java Model リソースに制約していました)。

ブレークポイントを "hidden" することもできるようになりました。

. つまり、ブレークポイント マネージャに登録する必要がありません。

ブレークポイントは選択的に永続化することもできます (マーカーは、マーカータイプのすべて/すべてを永続化することのみ可能でした)。

これにより、デバッグ モデルがより柔軟になり、クライアントがより多くのビルディング ブロックを使用できるようになります。

これはまた、私たちのJavaデバッグ実装の一部を簡素化しました - たとえば という機能です。 suspend on any uncaught exception という名前の型に対してブレークポイントを設定するだけです。 java.lang.Throwable という名前の型に対してブレークポイントを設定するだけで、特定の IType 特定のプロジェクトで .

ブレークポイントがブレークポイントマネージャに登録されていない(つまり 隠された ) - それは一つのクライアントによってのみ知られ、使用されます。 .

他の例として、" run to line breakpoint "です。これは IJavaRunToLineBreakpoint は、その特別な機能が不要になったため、削除されました。現在、Java デバッグ ui は、非表示で永続化されず、ヒット数が 1 の "行ブレークポイントを作成するだけです。これは、クライアントに構成要素を提供する一例です。