以编程方式调用 kd(控制台 windbg)选项

Call kd (console windbg) options programmatically

我需要从转储文件中提取堆栈跟踪。我使用这样的代码来调用 kd

cd C:\Program Files (x86)\Windows Kits\Debuggers\x86\
kd -y srv*c:\symbols*http://msdl.microsoft.com/download/symbols -z C:\dmp.dmp

然后在 cmd 中手动输入:

.ecxr

然后

k

问题是:如何以编程方式调用 .ecxt、k 和其他相同的工作人员,就像这样:

var startInfo = new ProcessStartInfo
{
    FileName = @"C:\Program Files (x86)\Windows Kits\Debuggers\x86\kd.exe",
    UseShellExecute = true,
    RedirectStandardOutput = true,
    Arguments = @"-y srv*c:\symbols*http://msdl.microsoft.com/download/symbols -z C:\dmp.dmp"
};

var proc = new Process { StartInfo = startInfo };

string stdOut = string.Empty;

proc.OutputDataReceived += (whosend, args) => stdOut += args.Data;

proc.Start();
proc.BeginOutputReadLine();
proc.WaitForExit();

MessageBox.Show(stdOut);

WinDbg 和 KD 采用命令行参数 -c,您可以在其中传递命令。不要忘记在末尾包含一个 ;q,以便调试器在完成时终止。

当您的脚本变长时,您可能希望将其放入一个文件中,然后 运行 将其作为 script 使用 $< 命令之一。