1

VBScript ホスト用のデバッガーを作成しています。私のデバッガは外部アプリケーションです。すべて順調。IApplicationDebugger::onHandleBreakPoint ハンドラーへの呼び出しを受け取ります。IDebugApplication::ResumeFromBreakPoint を呼び出すことができ、コードをステップ実行できます。

また、スクリプトを実行する前にブレークポイントを設定することもできます。再び IApplicationDebugger::onHandleBreakPoint が呼び出されます。エラーも処理されます。しかし、IApplicationDebugger::onHandleBreakPoint で中断している間に、新しいブレークポイントを設定したいと考えています。

IActiveScriptDebug へのマーシャリングされたポインターがあります。しかし、IActiveScriptDebug::EnumCodeContextsOfPosition を呼び出すと、アプリケーションがブロックされます。これは私にとって論理的な縫い目です。IActiveScript (IActiveScriptDebug) オブジェクトを含むスレッドは別の STA に存在し、記載されているようにデバッガーでブロックされたままです。

しかし、デバッガ スレッドから言語エンジンにアクセスする正しい方法は何ですか。必要なのは、特定のコード行の IDebugCodeContext または IEnumDebugCodeContexts インターフェイスだけです。同じ機能を実現するためにアクセスできる別のインターフェイスがありませんか。

4

1 に答える 1

1

主な解決策は、CreateAsyncDebugOperation の呼び出しで IDebugSyncOperation を使用することです。これにより、現在デバッグされているブロックされた言語エンジンにアクセスできます。

次の問題は、ブレークポイントを設定する必要がある一部のインターフェイス (IDebugApplication32 および IDebugApplicationThread) を別のプロセスにマーシャリングできないことです。

このインターフェイスは、VBScript 言語エンジンをホストするプロセスで使用でき、このアプリケーション内で自由に使用できます。

したがって、私の問題の解決策は、外部デバッガー EXE からデバッグされたアプリケーションに接続し、すべての操作を実行して、デバッグされたアプリケーション内にブレークポイントを設定することです。

デバッグ インターフェイスのいくつかのインターフェイスが異なるアパートメントに自由にマーシャリングできるかどうかを確認するのは困難な方法でした。

このすべてのものはまったく文書化されていません。悲しいことに:(

于 2014-07-28T11:50:13.680 に答える