linux下使用ulimit -S -c unlimited命令,可以使程序崩溃时生成core文件,使用gdb exec_file core_file就可以查看崩溃的程序,接着使用bt就基本可以定位触发崩溃的代码段
windows下没有这么方便,但可以使用procexp和windbg来达到相同的目的,程序崩溃后,可以打开procexp,然后在procexp中选择崩溃的程序,右键菜单中创建转储文件,接着打开windbg,导入转储文件,执行一系列命令,查找崩溃的代码段
一般,依次使用下面命令,即可定位崩溃代码段信息:
1. .sympath+ E:\rayvision\bin\
其中E:\rayvision\bin\是崩溃的程序对于的pdb文件的所在目录,另外pdb文件的名字必须是编译时生成的名字,后续重命名的不行
2. .reload /f
3. lm
此时,可以看到第一行中会显示匹配的pdb文件
4. .load wow64exts
当32位程序在64位机上执行,崩溃产生的dump文件,拿到32位机上找问题时,需要执行此命令
5. !sw
当32位程序在64位机上执行,崩溃产生的dump文件,拿到32位机上找问题时,需要执行此命令
6. !analyze -v
分析dump文件
7. kb
堆栈信息
8. ~*k
所有线程的堆栈信息
一些其他的命令:
.ecxr
kf 100
db 00030232
db
dt MSG 00030232
x test!*msg*
ln wWinMain
x wWinMain!test
u wWinMain!test
参考文章:
http://blog.csdn.net/hgy413/article/details/7602043
http://blog.csdn.net/chenyujing1234/article/details/7743460