Как установить точку останова внутри отладчика, который добавляется в точку останова
Я пишу отладчик для хоста 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-файла отладчика и выполнить все операции, чтобы установить точку останова внутри отлаженного приложения.
Это был сложный способ узнать, что некоторые интерфейсы интерфейса отладки могут свободно размещаться в разных квартирах, а другие - нет.
Все это не документировано вообще. Печально:(