以编程方式调用kd(console windbg)选项

时间:2016-08-18 15:14:20

标签: c# windbg

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

cd C:\Program Files (x86)\Windows Kits\10\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\10\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);

1 个答案:

答案 0 :(得分:2)

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

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