1

Visual Studio デバッガーのブレークポイントでプロセスを中断しています。非侵襲モードで cdb (Microsoft のコンソール デバッガー) をいくつでもアタッチできます。

cdb -p pid -pvr

Debug Engine API を使用する独自のプログラムを使用して同じことを達成する方法。

 IDebugClient* debugClient = 0;
(DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
 debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE
                |DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);

このコードは E_INVALIDARG を引き起こします。この組み合わせは許されませんか?以下のものは機能しますが、GetStackTrace を呼び出すと、E_UNEXPECTED が返されます。

debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE);
debugControl->GetStackTrace(0, 0, 0, pStackFrames, maxFrames, &framesFilled);

すでにデバッグ ブレークの非侵襲的な方法でプロセスにアタッチし、現在のスタックといくつかのグローバル変数値からいくつかのローカル変数を取得することに興味があります。

次に、!stl のようにシンボルのメモリの内容を繰り返しダンプするために使用される関数を教えてください。ベクトルのような構造の 1 つをダンプするプラグインを作成する必要があります。

ありがとう

4

1 に答える 1

2

何も悪いことはないと思います

DEBUG_ATTACH_NONINVASIVE | DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND 

組み合わせ-それは完全に許容され、assertサンプルでも取り上げられています。そうでなければ、ドキュメントに関する限り、それはそれほど詳細ではありません。wt (トレースおよび監視データ)を使用して拡張機能をデバッグすることをお勧めします。これは、エラーを返している正確なサブルーチンを見つける必要がある場合に特に役立ちます。これにより、問題に関するより良い洞察が得られる可能性があります。

拡張機能からアプリ内の型指定されたデータにリモートアクセスすることに関しては、ExtRemoteTypedクラス(sdkサブフォルダーのengextcpp.hppで利用可能)が非常に便利で直感的に使用できることがわかりました。

于 2009-06-04T13:10:16.960 に答える