使用.dmp+vs分析异常
环境准备
公共符号缓存目录
在系统临时目录之外的地方创建一个目录
如d:\VsSymbolsCache\
应用程序文件目录
运行相关文件
.exe
.dll
资源文件等
.pdb
如d:\MyApplication\
过程
配置“VS>工具>选项>调试”中各选项
常规
- 不勾选【启用“仅我的代码”】
- Release版的应用程序在编译时经过了vs优化,勾选此选项后无法显示我们的代码,而Debug版没有这个问题
- 不勾选【要求源文件与原始版本完全匹配】
- 勾选【为断点和当前语句突出显示整个源行】
符号
- 勾选“Microsoft符号服务器”,并在下面的“在此目录下缓存符号”的文字框中填写设置的公共符号目录(d:\VsSymbolsCache\)
- 单击新建符号目录按钮,填写应用程序的.pdb文件所在的目录(d:\MyApplication\)
使用VS打开.dmp文件,单击“使用混合进行调试”后等半天
可以打开“输出”窗口与“模块”窗口看相关的信息
通过各窗口查看StackTrace(主要是找到引发崩溃的异常所在线程)
“并行堆栈”窗口
图形方式显示所有线程的StackTrace
在此窗口中右键“显示外部代码”后就能在各个能显示StackTrace的窗口中直接显示托管代码(若有源文件)
“线程”窗口
列表所有线程
一般线程名显示为“RtlRaiseException”的线程是抛出托管异常的线程
先观察“优先级别”高的线程
“调用堆栈”窗口
看当前线程的StackTrace
勉強心を持てば、生活は虚しくない!