スレッドが正確なエラー コード (または少なくともゼロ以外の値) で終了したときに実行を停止するように Visual Studio 2008 デバッガーを構成できるかどうか疑問に思っていました。私のアプリは膨大な数のスレッドを使用するため、すべてを手動で追跡することは不可能です。
プログラム内の任意のスレッドが「exit(X);」にヒットしたときに VS2008 を中断するように指示する方法はありますか? (X は 0 とは異なります) および表示ソース ?
スレッドが正確なエラー コード (または少なくともゼロ以外の値) で終了したときに実行を停止するように Visual Studio 2008 デバッガーを構成できるかどうか疑問に思っていました。私のアプリは膨大な数のスレッドを使用するため、すべてを手動で追跡することは不可能です。
プログラム内の任意のスレッドが「exit(X);」にヒットしたときに VS2008 を中断するように指示する方法はありますか? (X は 0 とは異なります) および表示ソース ?
はい、関数にブレークポイントを設定し、終了ステータスが特定の値(この例では42)であるかどうかをテストする_RtlExitUserThread@4
ための条件を追加します。*(int*)(ESP+4) == 42
64ビットプログラムの場合は、ESP+8
の代わりにを使用しESP+4
ます。
ただし、スレッドまたはそのラッパーの1つを直接呼び出すのではなく、メインスレッドプロシージャから戻ることによってスレッドが終了した場合(通常の場合)、ExitThread
スレッドがどのスレッドであったか、またはスレッドが終了した原因についての情報はありません。終了ステータスとスレッドID。
注:関数名_RtlExitUserThread@4
は、Windowsの将来のバージョンで変更される可能性のある実装の詳細です。_RtlExitUserThread@4
はWindows7での名前です。システム上の実際の名前を確認するには、を実行して、マップするdumpbin /exports C:\Windows\system32\kernel32.dll
名前を探します。ExitThread