使用Visual Studio调试闪退问题

编写.NET或UWP软件时,Visual Studio是常用的的调试工具之一。其监视、调用堆栈等功能在对程序逻辑进行查错时十分有用。但如果软件在Visual Studio中启动时一切正常,在别的地方启动(比如后台任务、文件打开甚至在其他电脑上使用时)时却发生闪退,该如何进行调试呢?本文介绍如何创建内存转储文件(Dump)并使用Visual Studio进行“事后调试”,以实现对闪退故障的调试。

本文中介绍的方法需要适当版本的Visual Studio和Windows Server 2008或Windows Vista SP1以上版本的操作系统。通过将进程的内存数据保存到内存转储文件,可以在来不及附加调试器的启动崩溃场景中进行调试,或是对未安装调试工具的电脑上的进程进行调试。

创建转储文件

程序没有崩溃

ctrl+shift+esc键,打开任务管理器。在Windows 8或以上版本的任务管理器中需要进入“详细信息”模式。选择“进程”选项卡,右键单击需要调试的进程,单击“创建转储文件”,系统会自动将进程的内存数据保存到转储文件中,并弹出对话框显示保存的转储文件的位置。

程序崩溃了

首先,需要启动“Windows错误报告”系统中的CrashDump功能:

  1. 在Windows搜索或“运行”中输入regedit,打开“注册表编辑器”
  2. 导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
  3. 右键单击空白区域,点击新建-项,将名称设置为LocalDumps
  4. LocalDumps中创建DWORD值,命名为DumpType,值设置为2(对应Full Dump)

创建CrashDump:

  1. 打开软件并使其崩溃,此时系统会自动将进程的内存数据保存到转储文件中
  2. 在文件夹%LOCALAPPDATA%\CrashDumps中找到刚刚生成的dmp类型内存转储文件

在Visual Studio中调试转储文件

  1. 将之前获取到的内存转储文件保存到安装有Visual Studio的电脑上
  2. 在Visual Studio中打开源代码的解决方案,再点击“文件菜单-打开-文件”打开dmp格式的转储文件
  3. 点击“使用 仅限托管 进行调试”按钮调试C#、VB等.NET托管代码,或点击“使用 本机 进行调试”按钮调试C++、C等Native代码

这样就能像平时在Visual Studio中一样使用线程、监视、调用堆栈等功能、查看变量数值、查看抛出的异常信息了。唯一与正常调试不同的地方在于无法继续运行或使用逐过程等需要运行程序的功能。