別のプロセスによって生成された障害のあるプロセスをデバッグしようとしています。__debugbreak(); __asm int 3;
画像ファイルの実行を試みましたが、何も機能していないようです。コードからデバッガーをアタッチする方法を知っている人はいますか?
4 に答える
他に何も機能しない場合は、生成されたプロセスの最初にトリックを使用することがあります
while(1)
{
Sleep(1000); // +Breakpoint
}
開始後にプロセスにアタッチし、「set nextステートメント」を使用してループを通過します。
私は通常、Windows サービスの OnStart() をデバッグするために使用します。
問題が解決したら、必ずこのコードを削除してください。
Visual Studio は、CreateProcess で DEBUG_ONLY_THIS_PROCESS フラグを使用します。windbg に切り替えるか、コードにデバッガーをアタッチすることができます。たとえば、アクティブな VisualStudio.DTE.11.0 オブジェクトを取得し、_DTE::Debugger を呼び出してデバッガーを取得し、Debugger::LocalProcesses を呼び出してプロセスのリストを取得します。目的のプロセスを (たとえば、ファイル名または作成時間で) 見つけてから、Process::Attach を呼び出します。
私が時々使うのは、
MessageBox(NULL, "添付", "添付", MB_OK)
SDK と #include "windows.h" をリンクする必要がありますが、それだけです。メッセージ ボックスがポップアップ表示され、[OK] をクリックするまで待機します。その時点でデバッガーをアタッチし、ブレークポイントを設定して [OK] をクリックするだけです。
これは、生成されたプロセスからの応答を待っている生成プロセスからのタイム クリティカルなウォッチドッグがない限り機能します。存在する場合は、VS を起動して接続できるように、タイムアウトを増やす必要がある場合があります。