通过C#执行WinDbg命令
本文关键字:命令 WinDbg 执行 通过 | 更新日期: 2023-09-27 18:26:28
我需要通过C#执行WinDbg命令。为了更清楚,可以在后台通过C#打开WinDbg,在WinDbg命令行中执行一个命令,然后关闭WinDbg应用程序。C#提供了任何API来实现这一点吗??
如果您真的想要GUI,只需使用-c
开关将命令传递到窗口即可。附加到计算器并转储堆栈的示例命令行:
windbg.exe -pn calc.exe -c "kb"
这将使Windbg处于打开状态,并连接到计算器,显示运行kb
的结果。
如果您不需要Windbg GUI,只需要执行一个命令来获得它的输出,请使用CDB(等效的命令行调试器)。
cdb.exe -pn calc.exe -c "kb; qd"
因此,在这里,-c
后面的引号中的命令是在附加到名为(由于-pn
)"calc.exe"的进程后执行的。
在任何一种情况下,如果您有进程ID(PID),请使用-p
:
cdb.exe -p 1164 -c "kb; qd"
至于从C#运行它,最简单的方法是启动一个进程并读取控制台输出。请参阅此答案以获得现成的解决方案。
不,C#没有API来运行或控制WinDbg。
您可以使用通用进程。启动WinDbg并将脚本传递给它。
您可以从Windbg命令行执行C#代码,一种方法是为Windbg编写插件。不确定这是你想要的方法,但如果是这样的话,这里有一篇文章。
请参阅:https://powerdbg.codeplex.com/
它不是C#,但它是>net,也许你会找到一种方法
如果您准备将С#更改为python,请参阅https://pykd.codeplex.com
最后,您可以使用托管代码中的本地dll DbgEng/DbgHlp
除非将Naive调试器引擎封装在c++/cli checkout mdbglib中,否则无法使用它https://mdbglib.codeplex.com这是一个以这种方式编写的调试器
您可以将ClrMD用于C#API以下是开始的示例代码
关于如何使用的C#代码片段
// Create Debugger instance and call Execute for any Windbg Command
using (DbgEngine dbg = new DbgEngine(DumpFileName))
{
Console.WriteLine(dbg.Execute(".time"));
Console.WriteLine(dbg.Execute("~"));
Console.WriteLine(dbg.Execute(".sympath"));
}
运行Windbg命令并在C中查询.NET CLR运行时数据的简单调试器#https://github.com/sukesh-ak/AutoDebug