Как я могу прочитать пользовательский ввод из расширения отладчика (dbgeng) независимым от отладчика способом?

Я пишу расширение отладчика и ищу способ получить пользовательский ввод от расширения отладчика после того, как расширение начало выполняться.

Я размещаю PowerShell в расширении отладчика и пытаюсь реализовать поддержку Read-Host, которая требует ввода от пользователя.

Например, в отладчике я могу написать скрипт в PSExt_profile.ps1: function Foo{ Read-Host -Prompt "Enter your address" }

и в командной строке отладчика: !ps Foo

Это вызовет PowerShell, который запускает команду Read-Host.

Я не понимаю, как я могу попросить получить вход из WinDbg из расширения. В cdb я могу использовать консольные функции.

Есть ли общий способ обработки этого, который не зависит от отладчика, который загружает расширение?

1 ответ

Решение

Я написал расширение отладчика, которое размещало PS около 5 лет назад. Он был специально разработан для Windbg, так как уже были решения для KD и CDB (я думаю, они просто перенаправили stdin и stdout в сценарий драйвера PS). Поскольку код принадлежит компании, в которой я работаю, я отвечаю, глядя на API. Я вижу, что IDebugControl4::InputWide является методом ввода.

Документ для этого метода ссылается на "Использование ввода и вывода". В этой теме говорится о IDebugInputCallbacks. Предлагаю вам прочитать тему, если вы еще этого не сделали.

Эти API находятся в отладочном движке, поэтому должны быть общими для всех отладчиков, использующих этот механизм.

В итоге мы написали PS Host, который использовал различные API-интерфейсы для отладки для ввода / вывода. Мы также подключили WinProc к окну ввода в Windbg, чтобы мы могли завершить вкладку. Это позволило вводить команды PS и Windbg и завершать вкладку в окне ввода. Было только несколько команд, которые перекрывались между двумя наборами команд. ls был одним из них. Таким образом, у нас был механизм выхода, что-то вроде дополнительного пробела в начале команды, для обработки перекрытия.

Кстати, если вы заинтересованы в сотрудничестве по этому вопросу, дайте мне знать. Моя роль в моей компании изменилась вскоре после того, как у нас появился код уровня альфа-иш, так что я так и не дошел до конца. Я хотел вернуться к этому (и у моей компании был открытый исходный код), но не сделал этого.

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