Visual Studio、複数のスレッドの1つをデバッグする

c# multithreading visual-studio-2010
Visual Studio、複数のスレッドの1つをデバッグする

同じコードで動作する4つのスレッドを持つアプリケーションがあります。 ただし、ステップを実行すると、異なるスレッド間をジャンプします。 デバッグのために他のスレッドが無視されるように、あるスレッドにロックするにはどうすればよいですか?

  104  11


ベストアンサー

Yes.

[スレッド]ウィンドウ([デバッグ]→ [ウィンドウ]→ [スレッド])で、目的のスレッドを右クリックし、[スレッドに切り替える]を選択します。

また、スレッドを実行しないようにするために、デバッグしたくないスレッドで「フリーズ」を選択することもできます。 ただし、動作を期待する場合は、それらを「解凍」することを忘れないでください。

90


VS 2012では、単一のスレッドを介した単一のステップ実行がほぼ修正されているようです(以下のリンクにいくつかの注意事項があります)。 ブレークポイントは苦痛です。

以前の回答で述べたように、スレッドの凍結と解凍は通常の回避策ですが、面倒であり、スレッドが凍結されている別のスレッドで待機するとハングする可能性があります。 これらは、関心のあるスレッドでの位置を失うことなく回復するのが難しい場合があります。

別の便利なワークフローは、ブレークポイントにスレッドフィルターを適用することです。これも回答の一部に記載されています。

ブレークポイントを作成し、ブレークポイントを右クリックして[フィルター]をクリックし、ThreadId = 7740(スレッドウィンドウからのスレッドID)を入力します。

これは非常に面倒です。

マイクロソフトへの私の提案は、別のスレッドで明示的なブレークポイントがヒットしない限り、スレッドを切り替えないようにシングルステップ(およびそのバリエーション)を修正することです。 また、現在のスレッドIDをフィルターとして使用してブレークポイントを作成するショートカット(Ctrl-F9など)を追加する必要があります。 これにより、2番目のワークフローがはるかに便利になります。

これが有用であることに同意する場合は提案に投票するか、独自の提案を追加します。

16


コードに条件付きブレークポイントを置き、ブレークポイント条件に `thread.Id == [someValue]`または `Thread.Name ==” [Somename] “`を置くこともできます…​

10


これは、Visual Studio 2008 SP1の非常によく似た問題に非常に似ています。 SP後のホットフィックスで修正されました。 ただし、修正プログラムがコードベースに組み込まれなかったという他の証拠があります。これはhttps://connect.microsoft.com/VisualStudio/feedback/details/556756/debugger-randomly-treats-step-into-and-step-オーバーランとして完了[フィードバック項目]も問題でした。 修正プログラムが統合されないことは珍しいことではありません。

あなたの問題を正確に説明するフィードバック項目はありませんが、少なくとも私はそれを見つけることができます。 提出することをお勧めします。 このようなバグを再現する際の通常の問題を考えると、この問題を再現する再現プロジェクトに、問題の再現方法に関する指示を含めることを強くお勧めします。

問題の回避策があります。[デバッグ] + [Windows] + [スレッド]に進み、デバッグしないスレッドを右クリックして[フリーズ]を選択します。 後でそれらを解凍することを忘れないでください。

これらのバグは、Visual Studio 2010 Service Pack 1で再び修正されました。

2


単純な場合には、はるかに迅速な回避策が存在します-Steveのリンクのコメントを参照してください。

_
デバッガーは、ステップが開始されたスレッドでのみステップを完了します。 したがって、ブレークポイントにヒットし、それを無効にしてからステップ実行を開始する場合、別のスレッドで停止しないでください。 アプリケーションに他のブレークポイントがあり、別のスレッドがヒットした場合、説明されているように、混合スレッド状態でデバッグします。
_

したがって、私の場合、さまざまなスレッドがブレークポイントにヒットし始めたら、探しているコールが見つかるまで数回続けるだけです-ブレークポイントを削除し、コードの残りをステップスルーしましたが、同じスレッドに干渉することはありませんそれらの残り。

複数のブレークポイントを保持したい場合など、これは明らかに問題になります。 -しかし、これも単純な場合には、はるかに簡単です。

0


タイトルとURLをコピーしました