【问题标题】:How is WinDbg used, what exactly is it, and does it relate to .dmp files?WinDbg 是如何使用的,它到底是什么,它与 .dmp 文件有关系吗?
【发布时间】:2012-11-30 14:04:42
【问题描述】:

过去,我听说过使用 WinDbg 解析 .dmp 文件的参考资料(我想 - 我可能错了)。

我还在 .map 文件的帮助下进行了相当广泛的调试,并使用标准逻辑启发式和 Visual Studio 调试器进行了广泛的调试。

但是,我正在开发的程序有时会崩溃并创建一个 .dmp 文件。我一直无法解释 .dmp 文件。不久前,我发布了一个关于如何解释 .dmp 文件 (How to view .dmp file on Windows 7?) 的 SO 问题,但经过一番努力后,我无法弄清楚如何使用该问题的答案来解释 .dmp 文件。

今天,我正在查看一个不相关的 SO 问题 (C++ try/throw/catch => machine code),在已接受答案下方的有用评论再次提到了 WinDbg。

如果你真的想找到这个,很容易 - 只需追踪 在WinDbg中通过它

我愿意听从这个建议。然而,对我来说,“在 WinDbg 中跟踪它”并不容易。我过去曾尝试过,但无法弄清楚这到底意味着什么或该怎么做!

所以,我再试一次。 “一劳永逸”,我希望得到简单明了的说明:

  1. 什么是 WinDbg
  2. 假设 WinDbg 与 .dmp 文件相关,转储文件到底是什么以及它与 WinDbg 有何关系(如果我的假设错误,请纠正我)
  3. 如何创建 .dmp 文件,以及如何使用 WinDbg 分析它们(再次,如果我对 WinDbg 和 .dmp 文件之间的关系有误,请纠正我)。

如果您能从只安装并运行 Visual Studio 的程序员的“起点”回答这个问题。

谢谢!

【问题讨论】:

    标签: visual-studio-2010 visual-c++ windbg


    【解决方案1】:
    1. WinDbg 是一个多用途调试器。它可以像使用任何其他调试器一样通过附加、设置断点等来调试实时进程。它还可以分析故障转储文件,即 .dmp 文件。它通过你给它命令来发挥作用。

    2. .dmp 文件是某些内容的内存转储。那是什么取决于内存转储的用途。例如,它可以用于一个过程。它也可以用于内核。内存转储中的内容也取决于。在您的情况下,这可能是您的进程在崩溃时的样子。内存转储包含的内容可能因转储类型而异。

    3. 有多种方法。在 Windows Vista+、Server 2008+ 上 - 您可以直接从任务管理器中执行此操作。右键单击该进程,然后单击“创建内存转储”。 WinDbg 也可以使用.dump 命令从活动进程中进行内存转储。其他工具(如 adplus)可用于在某些情况下自动创建内存转储,例如当进程超过内存或 CPU 阈值时,或者当它崩溃时。

    WinDbg 可以很容易地打开崩溃转储。重要的是您首先要正确加载符号。通常以 .pdb 文件的形式或来自符号服务器(虽然不是必需的,或者总是可能的,但它非常有帮助)。

    运行 WinDbg 后,查看可在故障转储中查看的 list of commands

    【讨论】:

      【解决方案2】:
      1. WinDbg 是命令行调试器 cdb.exe 的 Gui 版本,两者都是用户进程和内核模式调试器,它使用 DbgHelp.dll 向您的应用程序或 NT 内核发出命令(您也可以这样做有一个 api)。
      2. .Dmp 文件是不同细节的内存转储,有些可能只有最少的细节,足以用于所有线程的调用堆栈,而其他文件将放置整个用户模式内存、句柄信息、线程信息、内存信息等。请参阅@ 987654321@了解更多信息。所以dump文件跟WinDbg没什么关系,除了能打开外,还可以在Visual Studio打开.dmp文件
      3. 就像@vcsjones 已经说过你可以使用任务管理器执行此操作(至少您可以从Vista 开始),您可以使用procdump,一旦附加了WinDbg,您就可以执行此操作,我通常会做一个完整的迷你转储,例如这个:.dump /ma c:\mem.dmp,您还可以使用Dr. Watson 设置 Windows 在发生崩溃时执行此操作

      但是,您必须拥有 Windows 和您的应用程序的符号才能生成合理的调用堆栈,请注意,由于显而易见的原因,您不能在内存转储中单步执行或设置断点,您只能在以下情况下执行此操作直播过程。您也可以非侵入式附加 WinDbg,因此可以附加 Visual Studio,您可以非侵入式附加 WinDbg,并使用 WinDbg 中的工具集来辅助调试。

      对我来说,WinDbg 的主要优点是它免费,下载和安装量小,速度快,它有一个非常丰富的工具集,用于诊断使用 Visual Studio 很难或不可能解决的问题。

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 2019-07-22
        • 2012-03-12
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多