惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tenable Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Security Latest
Security Latest
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
Webroot Blog
Webroot Blog
Project Zero
Project Zero
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
Spread Privacy
Spread Privacy
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News | PayPal Newsroom
Help Net Security
Help Net Security
The Hacker News
The Hacker News
H
Heimdal Security Blog
O
OpenAI News
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 叶小钗
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security Affairs
P
Proofpoint News Feed
S
Secure Thoughts
腾讯CDC
Google DeepMind News
Google DeepMind News
量子位
罗磊的独立博客

博客园 - Cdo

IP/TCP/UDP/RTP/RTCP 包结构图 Linux环境进程间通信(五): 共享内存(上) 完成端口详解 转:Windows消息编程 关于23种设计模式的有趣见解(转) QQREADER4F259A1BAEEAC3FE 挂钩 NtResumeThread 实现全局Hook static_cast、dynamic_cast、reinterpret_cast、和const_cast TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞 几大开源项目 脚本实例 - Cdo - 博客园 windows脚本实例 C语言高级测试:为C程序员准备的0x10个最佳问题 四种方法实现VC枚举系统当前进程 - Cdo - 博客园 主要的论文链接 追根究底,剖析MFC六大关键技术 VC中利用多线程技术实现线程之间的通信 C#程序实现动态调用DLL的研究 C语言中的位域
Windows自带的小巧的调试利器--Dr.Watson
Cdo · 2006-02-24 · via 博客园 - Cdo

1.Dr.Watson是什么?

          Dr.Watson( drwtsn32.exe)Windows自带的调试工具,相比于比较专业的程序调试工(WinDbg,Ntsd…)她显得比较的弱小,但是在如下场合她应该是比较好的一种选择:

a.       在没有安装任何调试工具的测试机器上我们的程序崩溃了.怎么办?是把Windows弹出来的报错的对话框抓屏发给开发人员看吗?说实话那个对话框对开发人员来说信息太少了,唯一能断定的是:,这个程序崩溃了.

b.       在最终用户的机器上;我们的程序已经发售到了最终用户手上,程序崩溃了,怎么办?问题出在哪?

在这个时候Dr.Watson显出了她的优势:她是Windows自带的调试工具,不需要另外安装,而且她能提供给开发人员必要的信息去确定问题 的所在.

这就是说Dr.Watson能在如下时刻帮助我们:

1.       应用程序崩溃了(Crash);

2.        应用程序遇到了异常(Exception)(:产生了异常如果我们采取了一切措施,比如Try-Catch机制,并不会导致崩溃)

2.Dr.Watson什么时候会被运行起来?

           如果你的机器上Dr.Watson被设置成默认的调试工具那么当你的Windows中任何程序崩溃的时候Dr.Watson会自动运行,当然她的运行也许没有界面(可以在Dr.Watson界面中设置),她只是默默的产生了一个包含错误信息的文件存放在特定的路径下.这时候你要做的也许就是把这个包含错误信息的文件发给开发人员.注意我们前面说到的如果Dr.Watson被设置成默认的调试工具那么….”也就是说Dr.Watson有可能并不是你机器上的默认的调试工具,比如说你安装了VC6++那么VC6++就会成为你的默认的调试工具….那如何把我们的Dr.Watson妹妹设置成默认的调试工具呢??请参看4.如何把 Dr.Watson设置成Windows默认的调试工具?

           另外一种运行Dr.Watson的方式就是在Run(运行)处输入drwtsn32回车.

3.当有程序崩溃的时候 Dr.Watson会产生什么文件?存在哪?

                 Dr.Watson产生的drwtson32.log,user.dmp文件,其中drwtson32.log是一个文本文件,大家随便找一个TextEdit就可以打开,里面包含的信息的解释稍后有详细的介绍,user.dmp文件是提供给WinDbg之类的稍专业一点的调试工具用的,WinDbg可以导入user.dmp文件然后看到崩溃的现场.

           文件的存放位置是可以在Dr.Watson中设置的,默认的存放位置和Windows的版本有关系:

  • Windows NT   :  %UserProfile%\Local Settings.
  • Windows 2000 : %AllUsersProfile%\Documents\DrWatson.
  • Windows 2003 : %AllUsersProfile%\Application Data\Microsoft\Dr Watson .
  • Windows XP   : %AllUsersProfile%\Application Data\Microsoft\Dr Watson .

下面是我的WinXP机器上的文件位置:

4.如何把 Dr.Watson设置成Windows默认的调试工具?

                 Start(开始)àRun(运行),输入drwtsn32 –i回车,好了,现在Dr.Watson就是你的Windows的默认的调试工具了.

5.如何让 Dr.Watson只关心我指定的程序的崩溃情况?

                 大部分时间我们并不关心别的程序是否崩溃而只是关心我们正在测试/调试的程序,那我们能否让Dr.Watson只记录我们感兴趣的那个程序的崩溃情况呢??

                  Run(运行)对话框中输入drwtsn32 -p ProcessID”你就可以指定Dr.Watson只调试指定的进程.

                  ProcessID是什么?是进程ID

                  那我怎么去知道我要调试的进程的ID?很简单:

                   1.打开任务管理器(Task Mamager),选择View->Select Columns;

 

    2.然后弹出一个对话框,我们选上 PID那个CheckBox;

好了,我们就可以在任务管理器(Task Mamager)中看到每一个进程的PID.

6.解读 Dr.Watson产生的drwtson32.log.

        因为user.dmp文件主要是提供给其他调试工具用的所以我们来看看drwtson32.log文件里面都是些什么东西….

  A. 我们写一个简单的会崩溃的程序(CrashDemo.exe)来说明这个文件包含的信息:

1. #pragma comment( )指示编译器为我们产生PDB文件,关于PDB文件大家需要的话我会有具体的文档介绍.

 2.AccessViolation函数产生一个访问异常:0x00000地址写东西,我没有任何的Try-Catch机制所以肯定要引发崩溃的.

B.我们设置一下Dr.Watson…..Run Dialog Box中输入” drwtsn32”,回车:

1.因为我们前面的程序编译产生了PDB文件所以我们这里钩上”Dump Symbol Table”;

2.Crash Dump Type我们钩上”Full”.

C.,运行一下我们的程序(CrashDemo.exe),崩溃了….我们开始解drwtsn32.log

这正是我们需要的,打开drwtsn32.log:(下面各个片段出现的顺序和真实的drwtson.log文件中的顺序一样)

下面这个片断是我们重点要关心的地方,因为它显示出了发生崩溃的原因及现场信息:

根据上面的信息结合源代码我们可以定位产生崩溃的位置和原因;如果没有源代码那我们只能得出这样的结论:

1.在源代码OutputDebugString的调用后面的那个函数出现了非法访问,它企图写内容到0x00000000;

2.出错的指令位于0x00401063(IP寄存器的值),我们可以根据前面的Module List找到该指令位于哪个模块(EXE,DLL…).

接下来是”*----> Raw Stack Dump <----*”这个片断,如果不是察看地址的值我们也许用不到这个片断.