强力 调试 工具 windbg:
1. 到windbg官网下载安装文件 http://www.windbg.org/
2.选择下载32bit or 64bit 版本:
我的经验:我们的编译机环境和运行机环境一致,都为winserver2003 sp2 64bit,因为是在运行机上安装,所以下载64bit版本
详见:Choosing the 32-Bit or 64-Bit Debugging Tools
3.下载windbg符号库文件(若机子有联网,可不用下载符号库)
根据环境下载,详见:Download Windows Symbol Packages
4.安装windbg和符号库(若机子有联网,可不用安装符号库)
5.设置windbg符号库路径,file->set symbol path
有联网的机子可使用微软提供网络符号库:SRV*e:/temp/*http://msdl.microsoft.com/download/symbols 其中e:/temp为本地的缓存目录
无联网的机子使用本地安装的符号路径库:例如 D:\Symbol
6.关闭windbg再打开,确认file->set symbol path 下路径以保存
7.attach程序
(1)file->attach to a process:根据名字或id选进程
(2)attach后进程会被中断挂起,先 F5 或 g指令 继续执行
(3)当进程触发异常时,信息会被windbg截获,并在界面上输出 RaiseException 之类的,用指令: .dump /ma c:\demp\test.dmp 生成dump文件
其中 /ma 是一个选项,表示dump文件类型
/m:注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模 块(DLL)信息、 进程信息和线程信息。
/ma:注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。
/mFhutwd:注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。
(4)在截获异常时,也可以查看进程当时的状态,如函数调用栈,行数,临时变量等
(5)调试器分离:debug->detach debuggee
adplus.exe 守护进程工具
adplus为 windbg 的附带工具,相当于守护进程的作用,可用于守护一个或多个同名进程,当进程发生异常时,会自动保存dump文件到相应目录,相比windbg简化了几步操作,配置 bat 使用更是方便快捷
(1)找到目录:adplus.exe 是在windbg的目录下,win32为路径为 C:\Program Files\Windows Kits\8.0\Debuggers\x86
(2)指令:adplus -crash -po test.exe -o c:\dumps
其中 test.exe 为守护对象进程名, c:\dumps 为最终dump文件生成目录
(3)对adplus 的指令有更进一步的需求的,可查看同目录下帮助文档 adplus.doc