Visual Studio开发工具----调试技巧-转储文件

3.10 转储文件

3.10.1 概述
       转储文件是一个快照,它显示正在执行的进程和某个时刻为应用程序加载的模块。转储文件带有堆信息的转储还包括应用程序在该点的内存快照。
       在Visual Studio中使用堆打开转储文件类似于在调试会话中的断点处停止。虽然不能继续执行,但可以在转储时检查应用程序的堆栈、线程和变量值。
       转储通常用于调试开发人员无法访问的机器中的问题。当您无法重现崩溃时,可以使用来自客户计算机的转储文件。
       Visual Studio调试器可以为托管代码或本机代码保存转储文件。它可以调试由Visual Studio或其他以minidump格式保存文件的应用程序创建的转储文件。
3.10.2 要求和限制

  • 要调试来自64位计算机的转储文件,Visual Studio必须在64位计算机上运行。
  • Visual Studio可以调试来自ARM设备的本机应用程序的转储文件。它还可以调试来自ARM设备的托管应用程序的转储,但只能在本机调试器中进行调试。
  • 要调试内核模式转储文件或在Visual Studio中使用SOS.dll调试扩展,请在Windows驱动程序工具包(WDK)中下载Windows的调试工具。
  • Visual Studio无法调试以旧的完整用户模式转储格式保存的转储文件。完整的用户模式转储与带有堆的转储不同。
  • 调试优化代码的转储文件可能会造成混乱。例如,编译器内联函数可能会导致意外的调用堆栈,而其他优化可能会改变变量的生存期。

3.10.3 具有或不具有堆的转储文件
转储文件可能具有或不具有堆信息。

  • 带堆的转储文件包含转储时应用程序内存的快照,包括变量的值。Visual Studio还使用堆将转储的本机模块的二进制文件保存在转储文件中,这可以使调试更加容易。Visual Studio可以从带有堆的转储文件中加载符号,即使找不到应用程序二进制文件也是如此。
  • 没有堆转储文件是比堆转储要小得多,但调试必须加载应用程序二进制文件找到符号信息。加载的二进制文件必须与转储创建期间运行的二进制文件完全匹配。没有堆的转储文件仅保存堆栈变量的值。

3.10.4 创建转储文件
       在应用程序崩溃之后且在程序结束之前创建转储文件,如下:
        
       上图只是说明如何创建转储文件。
       研发人员为了分析软件崩溃的问题,需要知道软件崩溃时刻的堆栈及变量的值,所以应该在软件崩溃之后程序结束之前创建该文件。(软件崩溃后,程序有时不会立即结束,此时可以创建转储文件。如果软件崩溃后,程序也跟着结束了,就无法创建转储文件了)。
3.10.5转储文件的使用
       研发人员拿到转储文件后,双击打开,选择相应的调试方式(调试与仅限托管、调试与仅限本机、调试与混合、或调试与托管内存):
        
       要在转储文件上使用完整的调试功能,Visual Studio需要:

  • 创建转储的.exe文件以及转储进程使用的其他二进制文件(DLL等)。
  • .exe和其他二进制文件的符号(.pdb)文件。
  • 与转储文件创建时的版本和构建完全匹配的.exe和.pdb文件。
  • 相关模块的源文件。如果找不到源文件,可以使用模块的反汇编。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dylan55_you

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值