一、vc6.0下
1、首先要生成pdb和map文件,需要做以下设置:
勾选红色的地方
按上面截图的设置好后编译即可。
二、dmp文件生成
1、dmp文件的生成,这个需要依赖一些代码来生成这个文件,这里就不贴代码了。
程序测试下这个函数。
上面代码让他人为崩溃,运行完后崩溃,会生成dmp文件。
三、windbg的配置和使用
1、先配置symbol(File \ Symbol File Path)
打开后填入C:\Symbols;SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
后面那个带链接的是第一次使用需要下载一些微软的支持库。后边使用就可以去掉了。
比如:C:\Symbols;D:\NoMi\worktest\TestDumpForVc\Debug
;;注意上面的“C:\Symbols;”,因为我在最上面已经把Symbols下载到C盘的Symbols了,所以可以把后面的http去掉,后边的;D:\NoMi\worktest\TestDumpForVc\Debug路径是pdb文件路径
注意路径不用包含pdb、exe的名字 比如到D:\\xxx\debug就行
2、配置源码路径( File \ Source File Path )
把代码路径贴进去就行了。比如“D:\worktest\TestDumpForVc”
3、设置Exe路径( File \ Image File Path )
填入执行程序路径,只要到目录层就行,例如“D:\worktest\TestDumpForVc\Release”
4.打开dmp文件
可以直接拖dmp进去,也可用下面的方式打开
5.打开后检测一些信息,然后输以下命令进行查看
l 打开dmp文件后会看到一些设置信息
l 输入命令!analyze -v
看到以下信息
再来对比下代码里的出问题的地方。
6.高版本的dmp文件设置
就拿2013来说
选择生成映射文件。
三、高版本的dmp文件调试。
1、高版本的可以用上面的方法进行windbg调试,也可以自身的编译器进行调试。
自身的编译器调试,dmp文件直接拖进去,然后,选择调试,如下图,他会定位出崩溃位置
四、map文件查看
1、map文件里存储的是各个函数的偏移地址。
当程序崩溃时,弹出的框里面会带有函数地址(winserver会弹出,win7好像不会有那种界面弹出),根据这个偏移地址就能找到相应的函数。
2、根据dmp文件提示出错的地址。去map里面找也能找着。比如
这里提示出错的地址是004014cb
打开map文件查看
根据上面出错的地址004014cb 找到地址范围,在下图中是
004014b0到004014e0中间。
从这就可以看出,是TestCrash到CreateDumpFile中间出错了。
再看下图的函数,找到问题所在。