WinDbg是如何使用的,究竟是什么,它与.dmp文件有什么关系?

时间:2012-11-30 14:04:43

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

过去,我听说过使用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文件之间的关系有误,请纠正我。)
  4. 如果你能从一个只安装并运行Visual Studio的程序员的“起点”回答这个问题。

    谢谢!

2 个答案:

答案 0 :(得分:4)

  1. WinDbg是一个多用途调试器。它可以通过附加,设置断点等来调试实时进程,就像使用任何其他调试器一样。它还可以分析崩溃转储文件,它们是.dmp文件。它通过你给它命令起作用。

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

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

  4. WinDbg可以轻松打开崩溃转储。重要的是首先正确加载符号。通常以.pdb文件的形式或从符号服务器的形式(虽然不是必需的,或者总是可能的,但它非常有用)。

    运行WinDbg后,请查看崩溃转储中可用的list of commands

答案 1 :(得分:2)

  1. WinDbg是命令行调试器cdb.exe的Gui版本,都是用户进程和内核模式调试器,它使用DbgHelp.dll向你的应用程序或NT内核发出命令(你也可以这样做)有一个api)。
  2. .Dmp文件是不同细节的内存转储,有些可以具有足够的细节以用于所有线程的调用堆栈,而其他文件可以放置整个用户模式内存,处理信息,线程信息,内存信息等。 {3}}了解更多信息。因此转储文件与WinDbg无关,除了它可以打开它们,顺便说一句,你可以在this中打开.dmp文件
  3. 就像@vcsjones已经声明你可以使用任务管理器这样做(至少你可以从Vista开始),你可以使用Visual Studio,你可以在连接WinDbg后做到这一点,我通常做一个完整的迷你转储如下:.dump /ma c:\mem.dmp,您也可以设置Windows在使用procdump发生崩溃时执行此操作
  4. 但是,您必须拥有Windows和应用程序的符号才能生成合理的调用堆栈,请注意,由于显而易见的原因,您无法单步执行或在内存转储中设置断点,因此您只能执行此操作现场流程。您也可以非侵入性地连接WinDbg,因此可以附加Visual Studio,您可以非侵入性地附加WinDbg并使用WinDbg中的工具集来协助调试。

    对我而言,WinDbg的主要优点是它是免费的,它是一个小的下载和安装,它很快,它有一个非常丰富的工具集,用于诊断使用visual studio很难或不可能完成的问题。