现在的位置: 首页 > 综合 > 正文

软件测试之Dr.Watson篇

2014年01月10日 ⁄ 综合 ⁄ 共 2785字 ⁄ 字号 评论关闭

     前一阵出差进行程序的联调,因为公司资源有限,所以并没有给我配备笔记本。当经理和组长逐bug进行调试时,我却只能来到客户的工控机旁进行软件的测试。正所谓生命不

息,bug不止,随着我一步步的操作,bug们也一次又一次开始向我示威。
    我这人向来是不喜欢测试工作的,除了对我自己写的模块进行必要的单元测试外,其它测试我只是草草进行。这次他们既然让我来测试,我只好按步就班地进行。
    bug一个又一个的出现,让我不胜其烦:这些明明很简单就能测出来的bug,怎么他们都没有发现呢?难道他们比我还更不屑于测试?
    然而抱怨是于事无补的,既然黑夜给了我黑色的眼睛,我不妨就用它们来寻找bug.

    当测到第N个bug时,我想:与其找到bug然后回去让他们调试,还不如我先找到出现bug的原因,这样就不用回去后再让他们验证错误了,直接验证代码就可以了.
    可是,如何在没有调试器和代码的情况下找到出现bug的原因呢?嘿嘿,本文要讲的就是这个......

    Dr.Watson是系统自带的一个程序错误调试工具。Dr.Watson其实就是柯南道尔那部著名世界的侦探小说《福尔摩斯》里面的那个医生“华生”,Microsoft的开发人员使用这个

名字来命名自己的调试工具,恐怕是想自己的工具能像“华生”一样有口皆碑,然而事实却是:很少有人关注它,甚至有人把他当做庸医。好了,闲话少谈,下面开始进入topic:
   
    注:下面的内容全部来自Microsoft的帮助文档,他们比我写的好多了.

  

Dr.Watson 概述

Dr.Watson for Windows 是一个程序错误调试程序

Dr.Watson 记录的信息是技术支持小组诊断运行 Windows 的计算机的程序错误所需的信息。只要检测到错误,就会创建一个文本文件 (Drwtsn32.log),并可按支持人员常用的方式传递给支持人员。也可以选择创建故障转储文件,它是程序员可以加载到调试程序中的二进制文件。

如果出现程序错误,Dr.Watson 将自动启动。要启动 Dr.Watson,请单击“开始”,单击“运行”,然后键入 drwtsn32。要从命令提示启动 Dr.Watson,请转到根目录,然后键入 drwtsn32

安装 Dr.Watson

安装 Windows 时,会将 Dr.Watson (Drwtsn32.exe) 安装到系统文件夹中。首次运行 Dr.Watson 时(即出现程序错误时或用户亲自启动 Dr.Watson 时),会设置默认选项。

Windows 中出现程序错误时,系统将搜索错误处理程序。程序错误处理程序处理程序运行过程中出现的错误。如果系统找不到程序错误处理程序,系统将验证是否该程序当前没有被调试,并认为错误没有被处理。如果系统找不到程序错误处理程序,系统将验证是否该程序当前没有被调试,并认为错误没有被处理。然后系统通过在“注册表编辑器”中查找程序错误调试程序来处理尚未处理的错误。

系统在“注册表编辑器”的注册表项 //HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/AeDebug 下查找名为 Debugger 和 Auto 的项。Debugger 项的值指定了调试程序将要用来分析程序错误的命令。如果找到了调试程序项的值,系统将查看 Auto 项的值是设置为 0 还是 1。

  • 如果 Auto 项的值设置为 0,系统将产生一个消息框,通知您发生了程序错误。如果“调试程序”项的值指定了有效调试程序所使用的命令,消息框将显示两个按钮:“确定”和“取消”。如果单击“确定”,程序将终止。如果单击“取消”,系统将启动指定的调试程序。如果“调试程序”项的值为空,消息框将只显示“确定”,并且不启动任何调试程序。
  • 如果 Auto 项的值设置为 1,并且调试程序项的值指定了有效调试程序所使用的命令,系统将自动启动该调试程序,并且不会产生消息框。

当在系统上安装 Windows 时,默认情况下 Auto 项的值设置为 1,并且调试程序项的值指定了启动 Dr.Watson 的命令。这意味着当出现程序错误时,Dr.Watson for Windows 将自动诊断错误,并记录相应的诊断信息。

如果您使用的默认调试程序不是 Dr.Watson,而又要换用 Dr.Watson,请在命令提示符后键入命令 drwtsn32 -i 来启动 Dr.Watson。键入 -i 可对注册表进行必要的更改。

如果安装了适当的符号并设置了符号搜索路径,Dr.Watson 可以生成更精确的调试信息。为此,首先需要从 Windows CD-ROM 中将符号复制到计算机的新建文件夹中。然后将需要创建新的系统环境变量。首先,请转到计算机上的 Systemroot 文件夹,建立一个名为“Symbols”的新文件夹。接下来,转到光盘上的 /Support/Debug/i386,将符号复制到已创建的“Symbols”文件夹下。复制符号后,请创建一个新的系统环境变量。创建新的系统环境变量时,为变量名称键“%systemroot%/Symbol”。请务必在添加的服务包中包括变量。例如:_NT_SYMBOL_PATH=%systemroot%/symbol;%systemroot%/hotfixes;%systemroot%/symbolsNt4Sp3。

使用 Dr.Watson

Dr. Watson 检测有关系统和程序失败的信息并将这些信息记录在一个日志文件中。在程序出错事件中,Dr. Watson 自动启动。

 注意

  • 要打开 Dr. Watson,请单击“开始”,然后单击“运行”。在“打开”框中,键入 drwtsn32
  • Dr. Watson 不能阻止错误的发生,但记录在日志文件中的信息可帮助技术支持人员诊断问题。
  • 有关使用 Dr. Watson 的信息,请单击“Dr. Watson”中的“帮助”。

使用 Dr.Watson 日志文件

在发生程序错误时,Dr.Watson 会生成一个日志文件(Drwtsn32.log)。日志文件总是以下列行打头:

 

发生应用程序意外错误:

 

日志文件的下一部分总是包含程序错误信息。列出的错误号对应于系统产生的错误。

日志文件的再下一部分包含关于用户和发生程序错误的计算机的系统信息。

日志文件的再下一部分包含当程序错误发生时在系统上运行的任务的列表。

日志文件的再下一部分包含程序加载的模块的列表。

日志文件的再下一部分包含所列出的线程 ID 的状态转储。状态转储由寄存器转储、当前程序计数器周围代码的分解、堆栈向后跟踪和原始堆栈转储组成。状态转储的第一部分列出了线程 ID。

 

线程 Id 0xbf 的状态转储

 

状态转储的下一部分包含寄存器转储。

状态转储的再下一部分包含指令分解。

状态转储的再下一部分包含堆栈向后跟踪。

状态转储的最后一部分包含原始堆栈转储。

在状态转储之后,日志文件的最后一部分包含符号表。

抱歉!评论已关闭.