10

スレッドが正確なエラー コード (または少なくともゼロ以外の値) で終了したときに実行を停止するように Visual Studio 2008 デバッガーを構成できるかどうか疑問に思っていました。私のアプリは膨大な数のスレッドを使用するため、すべてを手動で追跡することは不可能です。

プログラム内の任意のスレッドが「exit(X);」にヒットしたときに VS2008 を中断するように指示する方法はありますか? (X は 0 とは異なります) および表示ソース ?

4

1 に答える 1

7

はい、関数にブレークポイントを設定し、終了ステータスが特定の値(この例では42)であるかどうかをテストする_RtlExitUserThread@4ための条件を追加します。*(int*)(ESP+4) == 4264ビットプログラムの場合は、ESP+8の代わりにを使用しESP+4ます。

ただし、スレッドまたはそのラッパーの1つを直接呼び出すのではなく、メインスレッドプロシージャから戻ることによってスレッドが終了した場合(通常の場合)、ExitThreadスレッドがどのスレッドであったか、またはスレッドが終了した原因についての情報はありません。終了ステータスとスレッドID。

注:関数名_RtlExitUserThread@4は、Windowsの将来のバージョンで変更される可能性のある実装の詳細です。_RtlExitUserThread@4はWindows7での名前です。システム上の実際の名前を確認するには、を実行して、マップするdumpbin /exports C:\Windows\system32\kernel32.dll名前を探します。ExitThread

于 2012-10-31T18:26:07.687 に答える