DbgEng - получить вывод команды не через обратные вызовы

Я делаю отдельное приложение отладчика, используя Microsoft DbgEng. Я хочу открыть второй поток, который отправляет команды дополнительному экземпляру IDebugControl, и я хочу получить конкретный вывод для этого вызова метода IDebugControl Execute (и отправить его через соединение tcp).

У меня есть проблема, так как IDebugControl из основного потока также отправляет команды в Execute() и выходные данные могут быть смешаны. Мне нужен второй поток, потому что как только он выполнит команду типа "g" (go), он вызовет WaitForEvent(), и я не смогу получить дополнительную информацию о цели, пока не произойдет событие.

Мне нужно решение для этого.

Второй IDebugControl используется для операций, которые отправляют запросы только на данные, такие как строки разборки, дамп памяти... Интересно, смогу ли я создать второй IDebugClient и прикрепить его к уже открытому отлаженному процессу, и тогда проблема решена, потому что я может поставить другие обратные вызовы к нему.

Есть ли решение для меня?

1 ответ

Я думаю, что вы не должны вызывать какие-либо команды для отладки движка, пока он ожидает событий, кроме IDebugControl::SetInterrupt.

В любом случае, если вы хотите использовать два потока, вы можете зарегистрировать интерфейс обратного вызова IDebugOutputCallbacks и обрабатывать вывод с любым видом мьютекса.

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