通过C#执行WinDbg命令

本文关键字:命令 WinDbg 执行 通过 | 更新日期: 2023-09-27 18:26:28

我需要通过C#执行WinDbg命令。为了更清楚,可以在后台通过C#打开WinDbg,在WinDbg命令行中执行一个命令,然后关闭WinDbg应用程序。C#提供了任何API来实现这一点吗??

通过C#执行WinDbg命令

如果您真的想要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