1

我正在为 VBScript 主机编写调试器。我的调试器是一个外部应用程序。一切都很好。我接到 IApplicationDebugger::onHandleBreakPoint 处理程序的电话。我可以调用 IDebugApplication::ResumeFromBreakPoint 并且可以单步执行代码。

也可以在我运行脚本之前设置断点。再次调用 IApplicationDebugger::onHandleBreakPoint。还会处理错误。但是现在我想在 IApplicationDebugger::onHandleBreakPoint 中暂停时设置一个新断点。

我有一个指向 IActiveScriptDebug 的封送指针。但是当我调用 IActiveScriptDebug::EnumCodeContextsOfPosition 时,应用程序会阻塞。这对我来说是合乎逻辑的。具有 IActiveScript (IActiveScriptDebug) 对象的线程驻留在不同的 STA 中,并且仍如文档所述在调试器中被阻止。

但是从我的调试器线程访问语言引擎的正确方法是什么。我只需要一个用于特定代码行的 IDebugCodeContext 或 IEnumDebugCodeContexts 接口。我是否缺少可以访问以实现相同功能的不同界面。

4

1 回答 1

1

主要解决方案是使用 IDebugSyncOperation 并调用 CreateAsyncDebugOperation。这使我可以联系当前正在调试的被阻止的语言引擎。

下一个问题是我需要设置断点的一些接口(IDebugApplication32 和 IDebugApplicationThread)无法封送到不同的进程。

可以在承载 VBScript 语言引擎的进程中使用该接口,并且可以在该应用程序内部自由使用。

所以我的问题的解决方案是,从我的外部调试器 EXE 联系被调试的应用程序并执行所有操作以在被调试的应用程序内设置断点。

很难发现调试接口的某些接口可以自由编组到不同的单元,而其他接口则不能。

所有这些东西都没有记录在案。可悲:(

于 2014-07-28T11:50:13.680 回答