【问题标题】:Execute a WinDbg command through C#通过 C# 执行 WinDbg 命令
【发布时间】:2014-10-14 06:24:42
【问题描述】:

我需要通过 C# 执行 WinDbg 命令。更清楚一点,在后台通过C#打开WinDbg,在windbg命令行中执行一个命令,然后关闭windbg应用程序。 C# 是否提供任何 API 来执行此操作?

【问题讨论】:

  • 到目前为止你发现了什么?
  • 您是要在windbg 中针对您的自己的 进程还是其他进程执行某些操作?
  • 我正在使用 WinDbg 创建自定义命令。也改为转到 WinDbg 命令行并执行这些命令,我​​需要在单击使用 C# 创建的 GUI 中的按钮时执行它们
  • 请更具体。这是实时调试问题还是转储分析问题。如果实时调试:将命令发送到 WinDbg 的 C# 应用程序是否也是您要调试的应用程序(即 C# 应用程序调试本身)?这个问题听起来像是一个 XY 问题。请更详细地描述您实际想要实现的目标。它真的是启动 WinDbg 的唯一方法吗?或者以不同的方式达到相同的结果是否可以?
  • 我在现场调试,C#需要将要执行的命令发送到WinDbg并获取执行命令的输出。

标签: c# windbg


【解决方案1】:

如果您真的想要 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# 运行它,最简单的方法是启动 Process 并读取控制台输出。请参阅this answer 了解现成的解决方案。

【讨论】:

  • 在您提供的最后一个解决方案中,即创建一个进程很好,但是关于如何将要执行的命令作为输入提供给 WinDbg 的任何想法
  • 是的,很好的答案,这似乎可行,但是没有创建流程的任何其他方法??
  • 在不创建进程的情况下如何启动进程?创建您不想做的流程有什么意义?
  • 是的,如果不启动进程,我显然不能!但我不想使用除 WinDbg 之外的其他调试器 ..
【解决方案2】:

不,C# 没有 API 来运行或控制 WinDbg。

您可以使用通用Process.Start 来启动 WinDbg 并将脚本传递给它。

【讨论】:

【解决方案3】:

您可以从 Windbg 命令行执行 C# 代码,一种方法是为 Windbg 编写插件。不确定这是您所追求的方法,但如果是这样,这里是 post 怎么做。

【讨论】:

  • 从 WinDbg 调用 C#,我可以编写一个 DLL WinDbg 扩展,但我的要求是从 C# 应用程序执行 WinDbg 命令。
【解决方案4】:

见: https://powerdbg.codeplex.com/
它不是 C#,但它是 >net,也许你会找到一种方法

如果您准备将 С# 更改为 python,请参阅 https://pykd.codeplex.com

最后,您可以从托管代码中使用本机 dll DbgEng/DbgHlp

【讨论】:

  • 从托管代码中使用本机 DLL DbgEng/DbgHlp 的任何想法??
【解决方案5】:

无法使用原生调试器引擎,除非您将其包装在 c++/cli checkout mdbglib 周围 https://mdbglib.codeplex.com 这是一个调试器写成这样的时尚

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多