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