我正在尝试在一个开源项目中解析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状态下创建进程这样调试对象就可以在调试器可以附加之前运行。
我真的很想解决此错误,因为它会直接影响我,但此刻我真的不知道该怎么办。
感谢您提供的任何帮助。