私がデバッグしているメソッドでは、新しいスレッドを生成しています。親スレッドではなく、この新しいスレッドの実行をデバッグする必要があります。どうすれば日食でこれを行うことができますか?
新しいスレッドの「run」メソッドにブレークポイントを設定します。スレッドが開始すると、実行が停止します。
Shamit Vermaの答えに加えて:
マルチスレッドJavaアプリケーションのデバッグを扱う場合、ブレークポイントが設定されているスレッドだけを中断する標準のブレークポイントを使用しない方が良いです。アプリケーションで標準ブレークポイントを定義すると、関連するスレッドのみが破損します。他のスレッドは引き続き実行されます。何らかの理由でEclipseデバッガーでは、他のスレッドが既に開始されている場合、デバッガーはブレークポイントをスキップします。
Javaをデバッグするためのソリューション:
目的のスレッドにブレークポイントを定義します(@ Run()メソッドi ..)、ブレークポイントで右クリック->ブレークポイントプロパティ。
ブレークポイントプロパティダイアログで、[スレッドの一時停止]ではなく[VMの一時停止]にチェックマークを付けます。
このようにすると、ブレークポイントに到達した場合にVM全体が中断されます。
C/C++ CDTでは、useset scheduler-locking on:
@Employed Russianが answer-to-other-question で述べているように、GDBコマンド:
set scheduler-locking on
現在のスレッドのステップ実行を許可する間、他のC/C++スレッドが中断されたままになります。このコマンドは、プログラムの実行を中断し、「デバッガーコンソール」パースペクティブを開いて次を入力することにより、Eclipse/CDTデバッグで実行できます。set scheduler-locking on :スケジューラーロックをオフに設定
scheduler-lockingおよびnon-stopモードの詳細については、GDBのドキュメントを参照してください。糸。
エリック・カジュの答えに加えて。 CDTをデバッグしている場合(これはJavaにも当てはまるかもしれませんが、それについてはわかりません)
欠点は、この手順をデバッグセッションごとに繰り返す必要があることです。誰かがショートカットを提供できるなら、それはいいでしょう。