1

別のプロセスによって生成された障害のあるプロセスをデバッグしようとしています。__debugbreak(); __asm int 3;画像ファイルの実行を試みましたが、何も機能していないようです。コードからデバッガーをアタッチする方法を知っている人はいますか?

4

4 に答える 4

3

他に何も機能しない場合は、生成されたプロセスの最初にトリックを使用することがあります

while(1)
{
    Sleep(1000); // +Breakpoint
}

開始後にプロセスにアタッチし、「set nextステートメント」を使用してループを通過します。

私は通常、Windows サービスの OnStart() をデバッグするために使用します。

問題が解決したら、必ずこのコードを削除してください。

于 2013-07-07T08:15:17.847 に答える
2

Visual Studio は、CreateProcess で DEBUG_ONLY_THIS_PROCESS フラグを使用します。windbg に切り替えるか、コードにデバッガーをアタッチすることができます。たとえば、アクティブな VisualStudio.DTE.11.0 オブジェクトを取得し、_DTE::Debugger を呼び出してデバッガーを取得し、Debugger::LocalProcesses を呼び出してプロセスのリストを取得します。目的のプロセスを (たとえば、ファイル名または作成時間で) 見つけてから、Process::Attach を呼び出します。

于 2013-07-07T18:10:17.987 に答える
2

私が時々使うのは、

MessageBox(NULL, "添付", "添付", MB_OK)

SDK と #include "windows.h" をリンクする必要がありますが、それだけです。メッセージ ボックスがポップアップ表示され、[OK] をクリックするまで待機します。その時点でデバッガーをアタッチし、ブレークポイントを設定して [OK] をクリックするだけです。

これは、生成されたプロセスからの応答を待っている生成プロセスからのタイム クリティカルなウォッチドッグがない限り機能します。存在する場合は、VS を起動して接続できるように、タイムアウトを増やす必要がある場合があります。

于 2013-07-07T13:12:47.177 に答える
0

__debugbreak() の代わりに DebugBreak を使用しなかった理由はありますか?

違いの説明はこちら

デバッガーが起動しないように見えるケースがありましたが、実際には、どの VS セッション/バージョンをアタッチするかを尋ねる非表示のダイアログがありました。これがあなたに起こっていないことを確認するために、ウィンドウをAlt-Tabで移動してください。

于 2013-07-07T07:18:37.587 に答える