套用80/20原则,我们大部分时候只使用了Windbg的20%功能,当然我没有精确统计过,但也相差无几,Windbg的上百条功能命令中,我们平时工作也就是使用了其中的几组命令而己,为了减少大家学习的负担,我准备在实战中讲解Windbg的常用功能。
那么,让我们开始Windbg实战之旅吧
现在,测试部江湖告急,报告说他无意中发现软件Sample.exe崩溃了。
“很奇怪,我明明做了详细的测试,怎么在他那里出错了呢?我的电脑上怎么没错?”,莫慌,咱有神器Windbg呢,看看它是如何帮你排扰解难的吧。
在测试环境下,一般按照以下步聚来调试,
1. 安装调试器
2. 将调试器与被调试对象建立调试关系
3. 配置调试器相关信息参数
4. 查看软件各线程调试栈,局部变量等信息
5. 以事实作依据,假设分析验证,总结Bug产生原因
一:安装调试器
Windbg是MS提供的一款免费调试器,可在这个地址下载:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463009/。双击安装包按提示安装即可。
二:将调试器与被调试对象建立调试关系
因为软件可能是偶尔崩溃的,很可能是不可重现的,冒失地重启软件进行Bug重现是不成熟的行为,所以在调试Sample.exe时,我们不能在Windbg中启动Sample.exe来重现Bug进行调试,因为这样就需要关闭Sample.exe,如果Bug是概率性出现的,我们将需要大量的精 力来重现Bug。
这里我们有两种方法在不退出Sample.exe的情况下来与它建立调试关系。
1.离线调试:
抓取Sample.exe的dump文件,Windbg通过调试Dump文件来分析Bug原因,抓取Dump文件的方法,以后再进行详细讨论,对于Win7操作系统,一种简单的办法就是在任务管理器的进程选项卡中右击需要生成Dump文件的进程名,在弹出菜单上选择创建转储文件即可,如下图所示:
生成Dump文件后,可能通过Widnbg菜单栏中的File->Open Crash Dump菜单项来打开Dump文件。
2.在线调试:
将WindbgAttach 至Sample.exe上,在调试完毕后,执行Detach。 具体方法选择File菜单中的Attach to a Process菜单项,在弹出的进程选择框中选择待调试的进程即可。
有一点需要注意的,一个进程只能被一个调试器调试,若当前我们正在用Visual Stdio调试某进程,这里如果我们想用Windbg查看该进程信息,我们需要在进程选择框上勾选上Noninvasive 这里,Windbg就只能看而不能控制了,也就是不能对进程进行单步调试了。
不论使用哪种方法,均可以保持Sample.exe不退出。与离线调试相比,在线调试有一个优点,即可以通过控制命令对进程进行单步调试。所以如果我们能接触到软件出错现场,一般情况下我们都会进行在线调试.