过去,我听说过使用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 中追踪它”并不容易。我过去曾尝试过,无法弄清楚究竟是什么意思或做什么!
所以,我再试一次。 “一劳永逸”,我想提供简明扼要的说明:
如果你能从一个只安装并运行Visual Studio的程序员的“起点”回答这个问题。
谢谢!
答案 0 :(得分:4)
WinDbg是一个多用途调试器。它可以通过附加,设置断点等来调试实时进程,就像使用任何其他调试器一样。它还可以分析崩溃转储文件,它们是.dmp文件。它通过你给它命令起作用。
.dmp文件是某种内存转储。这是什么取决于内存转储的用途。例如,它可能是一个过程。它也可以用于内核。内存转储中的内容也取决于。在您的情况下,它可能是您的流程在崩溃时的样子。内存转储包含的内容可能因转储类型而异。
有各种方法。在Windows Vista +,Server 2008+上 - 您可以从任务管理器直接执行此操作。右键单击该过程,然后单击“创建内存转储”。 WinDbg也可以使用.dump
命令从实时进程进行内存转储。其他工具(如adplus)可用于在某些条件下自动创建内存转储,例如当进程超出内存或CPU阈值时,或崩溃时。
WinDbg可以轻松打开崩溃转储。重要的是首先正确加载符号。通常以.pdb文件的形式或从符号服务器的形式(虽然不是必需的,或者总是可能的,但它非常有用)。
运行WinDbg后,请查看崩溃转储中可用的list of commands。
答案 1 :(得分:2)
.dump /ma c:\mem.dmp
,您也可以设置Windows在使用procdump发生崩溃时执行此操作但是,您必须拥有Windows和应用程序的符号才能生成合理的调用堆栈,请注意,由于显而易见的原因,您无法单步执行或在内存转储中设置断点,因此您只能执行此操作现场流程。您也可以非侵入性地连接WinDbg,因此可以附加Visual Studio,您可以非侵入性地附加WinDbg并使用WinDbg中的工具集来协助调试。
对我而言,WinDbg的主要优点是它是免费的,它是一个小的下载和安装,它很快,它有一个非常丰富的工具集,用于诊断使用visual studio很难或不可能完成的问题。