Как запустить процесс с перенаправленным вводом-выводом с помощью WinDbg - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь устранить ошибку в проекте с открытым исходным кодом, это расширение VSCode, которое добавляет поддержку отладки WinDbg.Ошибка заключается в том, что потоки stdin, stdout и stderr отладчика не передаются в VSCode, поэтому в среде IDE невозможно увидеть текстовый вывод программы или ответить на интерактивные запросы.

Для началас, я пытаюсь получить стандартный вывод отладчика на сервер отладки, где сейчас я просто запишу его в файл.Я планирую выяснить, как получить его в VSCode позже.

Код на сервере отладки ссылается на отладчика по «идентификатору системы», который, по-видимому, совпадает с PID.Я пытаюсь сделать:

var proc = Process.GetProcessById((int)systemId);
proc.OutputDataReceived += new DataReceivedEventHandler(StandardOutputHandler);
proc.BeginOutputReadLine();

Но я получаю ошибку:

System.InvalidOperationException: StandardOut has not been redirected or the process hasn't started yet

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

int hr = _debugger.CreateProcessAndAttachWide(
    Defaults.NoServer,
    $"{message.FullPath} {message.Arguments}",
    Defaults.DEBUG,
    Defaults.NoProcess,
    DEBUG_ATTACH.DEFAULT);

(_debugger - это IDebugClient4, а значение берется из точки входа DebugCreate в dbgeng.dll)

Я попытался создатьобрабатывать с перенаправленным вводом-выводом, используя класс System.Diagnostics.Process, но потом я не смог подключить отладчик, я думаю, потому что у Process нет никаких средств для создания процесса в состоянии SUSPENDED, и поэтому отладчик работал до этогоотладчик может подключиться.

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

Спасибо за любую помощьВы можете предоставить.

...