web-dev-qa-db-ja.com

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

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

同じEclipseワークスペースに、この問題の影響を受けない、2番目に大きなプロジェクトがあります。

私は、Europa Eclipseで開発してこの問題を抱えていた古いLinuxマシンから小さなプロジェクトを移動し、新しいWindowsマシンに移しました。そこで、Ganymede Eclipseで引き続き問題が発生します。この問題は、オペレーティングシステム間およびEclipseバージョン間で持続しますが、明らかにプロジェクト間では持続しません。わかりません!このプロジェクトのディレクトリ内のすべてのファイルを調べましたが、FileInputStreamで停止するようにEclipseに指示するファイルである可能性のあるものは見つかりませんでした。

詳細:実際のブレークポイントはFileInputStreamの106行目ではありません。 FileNotFoundExceptionの例外ブレークポイントのように見え、FileInputStreamのその行から呼び出されたネイティブコードからスローされます。しかし、繰り返しますが、ブレークポイントがまったく設定されていないようです。例外ブレークポイントはどこか他の場所で定義されていますか?

72
skiphoppy

選択を解除しようとしましたか

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

? (たとえば このスレッドで言及 など)

alt text

なぜEclipseはそのように機能するのですか?

ブレークポイントオブジェクト階層が削除されたとき、それは 2002年に戻る です。

古いAPIでブレークポイントを設定するには、クライアントにJavaモデルオブジェクト-ITypeIFieldなど)が必要でした。
新しいAPIでは、デバッグモデルに必要なのは型名、フィールド名などだけです。

これにより、クライアントはJavaモデルオブジェクトが利用できない場合にブレークポイントを設定できます。
クライアントは、ブレークポイントを関連付けるリソースを指定するようになりました(関連するJavaモデルリソース)に制限する前に)。

ブレークポイントを「非表示」にすることもできます。つまり、ブレークポイントマネージャに登録する必要はありません。
ブレークポイントは、選択的に永続化することもできます(マーカーは、マーカータイプのすべて/なしのみを永続化できます)。
これにより、デバッグモデルの柔軟性が高まり、クライアントにより多くのビルディングブロックが提供されます。

これにより、Javaデバッグ実装-たとえば機能 "suspend on any uncaught exception"の一部が単純化され、型のブレークポイントが設定されます。特定のプロジェクトの特定のITypeではなく、「Java.lang.Throwable」という名前です。
ブレークポイントはブレークポイントマネージャーに登録されていません(つまりhidden)-1つのクライアントのみが認識して使用します
別の例は「run to line breakpoint」です。 IJavaRunToLineBreakpointは特別な機能が不要になったため削除されました。ここで、Java debug uiは、非表示で永続化されず、ヒットカウントが1の「行ブレークポイント」を作成します。これは、ビルディングブロックをクライアントに提供する例です。

112
VonC

私は同様の問題を抱えていましたが、受け入れられた解決策はうまくいきませんでした。 Eclipseを実行していますAndroid開発し、いくつかのブレークポイントを設定し、後でそれらを設定解除しました。

ウィンドウ>ビューの表示>その他...

デバッグ>ブレークポイント

次に、任意のブレークポイントを右クリックして、「すべて削除」を選択します

残念ながら、すべての有効なブレークポイントをリセットする必要がありますが、これは私のために機能し、今後の不安や欲求不満を防ぎます。

他の人を導くいくつかの写真:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

37
Mark Scheel

他の解決策が役に立たない人のために、私の問題に対する個人的な解決策を見つけました。私は、ワークスペースに別のプロジェクトをビルドすることで生成される.jarライブラリを使用します。 .Javaのブレークポイントをライブラリプロジェクトに設定すると、最終プロジェクトのデバッグ時にブレークポイントがトリガーされます。ただし、デバッガが実行を一時停止すると独自のブレークポイントを持つ.classファイルが表示されますであるため、.Javaファイルに設定されたブレークポイントはここに表示されません!

ソリューション:ブレークポイントを削除するには、ライブラリプロジェクトの.Javaファイルにブレークポイントを削除する必要があります。

5
HAL9000

ソースファイルに存在しないブレークポイントの永続的なマーカーが存在するという問題に遭遇しました。プロジェクトのクリーンアップ、フルビルド、Eclipseの再起動を試みましたが、何も機能しませんでした。

Eclipseメタデータを調べてみると、プロジェクトの.markersファイルが見つかりました。そのファイルを削除すると、最終的に問題が修正されました。

この問題を抱えている他のユーザーについては、ワークスペースディレクトリを開き、.metadata/.plugins/org.Eclipse.core.resources/.projects/yourプロジェクトに移動してから、ファイル.markersの名前を変更/削除します。

たとえば、ワークスペースフォルダーが〜/ workspaceで、プロジェクトの名前がFooの場合、次のようにできます。

$ mv ~/workspace/.metadata/.plugins/org.Eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers
2
javagrendel

以前の回答から解決策を見つけられなかった人のために、彼らは私の問題を解決したものを試すことができます。 HAL9000の問題/解決策に似ていると思います

同じ名前の2つのクラス(2つの異なるプロジェクト)に1つのブレークポイントがある場合、他のクラスにも同様に適用します。どちらも「Breakpoints」ウィンドウに表示されます。

Solution:同じ名前のクラスからブレークポイントを削除すると、それを使用していないので、デバッグしているクラスからブレークポイントが削除されます。

0
Christopher