Как установить точку останова внутри отладчика, который добавляется в точку останова

Я пишу отладчик для хоста VBScript. Мой отладчик - это внешнее приложение. Все отлично. Я получаю вызов моего обработчика IApplicationDebugger::onHandleBreakPoint. Я могу позвонить IDebugApplication::ResumeFromBreakPoint и пройтись по коду.

Также есть возможность установить точки останова, прежде чем я запустите скрипт. Снова вызывается IApplicationDebugger::onHandleBreakPoint. Также ошибки обрабатываются. Но теперь я хочу установить новую точку останова, пока я приостановлен в IApplicationDebugger::onHandleBreakPoint.

У меня есть маршализованный указатель на IActiveScriptDebug. Но когда я вызываю IActiveScriptDebug::EnumCodeContextsOfPosition, блоки приложения. Это швы логично для меня. Поток с объектом IActiveScript (IActiveScriptDebug) находится в другом STA и по-прежнему заблокирован в отладчике, как описано в документации.

Но как правильно получить доступ к движку Language из моего потока отладчика. Все, что мне нужно, это интерфейс IDebugCodeContext или IEnumDebugCodeContexts для конкретной строки кода. Мне не хватает другого интерфейса, к которому я могу получить доступ для достижения той же функциональности.

1 ответ

Решение

Основным решением является использование IDebugSyncOperation с вызовом CreateAsyncDebugOperation. Это позволяет мне связаться с заблокированным языковым движком, который в настоящее время отлажен.

Следующая проблема заключается в том, что некоторые интерфейсы, которые мне нужны для установки точки останова (IDebugApplication32 и IDebugApplicationThread), нельзя маршалировать в другой процесс.

Эти интерфейсы можно использовать в процессе, в котором размещается языковой движок VBScript, и они могут свободно использоваться внутри этого приложения.

Поэтому решение моей проблемы состоит в том, чтобы связаться с отлаженным приложением из моего внешнего EXE-файла отладчика и выполнить все операции, чтобы установить точку останова внутри отлаженного приложения.

Это был сложный способ узнать, что некоторые интерфейсы интерфейса отладки могут свободно размещаться в разных квартирах, а другие - нет.

Все это не документировано вообще. Печально:(

Другие вопросы по тегам