【问题标题】:Production debugging: Is there a less intrusive way than WinDbg?生产调试:有没有比 WinDbg 侵入性更小的方式?
【发布时间】:2011-01-27 03:53:11
【问题描述】:

我想知道是否有一种侵入性较小的方法来分析生产环境中正在运行的托管进程。

侵入性较小的意思:

  • 附加调试器时不会延迟执行。
  • 在获取运行线程等基本统计信息时不会延迟执行。

在 Java 世界中,JDK 中有一个这样的工具部分。我想知道 .NET 世界中是否有类似的工具。

该工具应回答以下问题:

  • 什么是线程池参数?与 Windbg 中的 "!threadpool" 相同。
  • 我当前正在运行的线程的调用堆栈是什么(是的,您可以从 Java 工具中获得它:)。
  • 基本堆分析,例如有多少 ABC 类型的对象。

有什么想法吗?

亚历克斯

【问题讨论】:

    标签: debugging clr windbg


    【解决方案1】:

    如果我理解正确,您并不想实际调试程序,只获取一些基本信息。在这种情况下,Process Explorer 可能就足够了。

    【讨论】:

    • 我想多看一点Win32进程信息。然而,“托管进程资源管理器”可能会非常接近。我会更详细地编辑问题。
    【解决方案2】:

    这取决于您要调试的内容。 WinDbg 是 Windows 调试的巨锤,适合调试从内核扩展开始的任何东西。

    如果你只是想调试一个程序,大多数人只是使用 Visual Studio,它会附加到正在运行的进程。

    但是,@oefe 在这里可能会遇到麻烦。当大多数人说“调试器”时,他们想要回溯和断点等。在 Java 中,您需要事先安排好附加那种调试器。 Windbg 或 Visual Studio (-debugexe) 都比这方便。

    【讨论】:

    • 我发现在生产环境中,Visual Studio 可能非常具有侵入性,而 WinDbg 由于其简单的复制部署和对离线调试的强大支持而更易于使用。
    • @Brian Rasmussen 没有争论。
    • 好吧,至于 VS……他的帖子真的是关于生产环境的。
    【解决方案3】:

    正如 Oefe 所说,您可以从 Process Explorer 获得很多信息,包括所有线程的堆栈。此外,.NET 运行时有许多有用的performance counters,可能会给您一些见解。如果您有特殊需求,您的应用可以发布自己的计数器。

    【讨论】:

      【解决方案4】:

      这里是使用ETWanother one以非侵入方式进行生产调试

      【讨论】:

        猜你喜欢
        • 2012-12-26
        • 2013-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 2011-02-19
        相关资源
        最近更新 更多