准备的文件:只需dump文件和对应的pdb文件
步骤如下:
1):在电脑D盘下创建mydump和mylocalsymbols,分别用于放置dump文件和微软官方符号文件
2):将dump文件和对应的pdb文件放置D:\mydump文件夹下
3):打开WinDbg软件:File==>Symbol File Path,在弹出的窗口中输入D:\mydump;SRV*D:\mylocalsymbols*http://msdl.microsoft.com/download/symbols
WinDbg轻松搞定dump文件中的问题
解释:
D:\mydump表示自己的pdb文件路径;
SRV*D:\mylocalsymbols*http://msdl.microsoft.com/download/symbols表示将微软官方的符号根据提供的url文件下载到D:\mylocalsymbols中
4):File==>Open Crash Dump,选中D:\mydump下得dump文件,此后大概需要30秒时间,直到当WinDbg窗口左下角出现WinDbg轻松搞定dump文件中的问题(注意此过程花费的时间会从微软官方下载部分符号文件)
5):在上一步中截图的空白方框内输入!analyze -v 命令,开始解析dump文件,此时花费大概5分钟(时间主要花费在从微软官方下载剩余部分的符号文件),直到WinDbg窗口左下角由**BUSY*变成0:031>表明分析完毕
6):产生如下信息

FAULTING_IP:
lagpsvr!CMyServer::OnPassCards+47 [d:\jenkins\workspace\publish_lagpsvr\gamesvr\my\myserver.cpp @ 862]
00f99b57 8b4804 mov ecx,dword ptr [eax+4]

EXCEPTION_RECORD: ffffffff – (.exr 0xffffffffffffffff)
ExceptionAddress: 00f99b57 (lagpsvr!CMyServer::OnPassCards+0x00000047)

ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000004
Attempt to read from address 00000004

STACK_TEXT:
06dbf990 00fa5cc2 0e2076f8 10baa308 02f1a340 lagpsvr!CMyServer::OnPassCards+0x47

STACK_COMMAND: ~31s; .ecxr ; kb
FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_lagpsvr.exe!CMyServer::OnPassCards
BUCKET_ID: APPLICATION_FAULT_INVALID_POINTER_READ_NULL_CLASS_PTR_DEREFERENCE_lagpsvr!CMyServer::OnPassCards+47

解析:根据以上信息,种种迹象([d:\jenkins\workspace\publish_lagpsvr\gamesvr\my\myserver.cpp @ 862)表明myserver.cpp文件的第862行代码引起了此次崩溃,EXCEPTION_RECORD表明此次为空指针或者指针指向了一个不存在的成员。找到对应此产生dump的版本项目,打开myserver.cppWinDbg轻松搞定dump文件中的问题
第862行,指针强转后未对其合法性检验就使用,你看明白了吧,点个赞吧!

相关文章: