如何使用WinDbg使用重定向的IO启动进程

时间:2018-10-16 10:19:11

标签: c# windbg dbgeng

我正在尝试在一个开源项目中解析a bug,它是一个VSCode扩展,它添加了WinDbg调试支持。该错误是调试对象的stdin,stdout和stderr流未代理到VSCode,因此在IDE中,无法看到程序的文本输出或响应交互式提示。

首先,我试图将调试对象的标准输出输入调试服务器,在这里我将其记录到文件中。我打算稍后再研究如何将其添加到VSCode中。

调试服务器中的代码通过“系统ID”来引用调试对象,这似乎与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

我认为问题在于,我打算在流程启动时重定向IO流,但是我不知道该怎么做。正在使用以下代码启动该过程:

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

({_debugger是一个IDebugClient4,该值来自dbgeng.dll的DebugCreate入口点)

我尝试使用System.Diagnostics.Process类使用重定向的IO创建进程,但是后来我无法连接调试器,因为进程没有任何功能可以在SUSPENDED状态下创建进程这样调试对象就可以在调试器可以附加之前运行。

我真的很想解决此错误,因为它会直接影响我,但此刻我真的不知道该怎么办。

感谢您提供的任何帮助。

0 个答案:

没有答案