Chinaunix首页 | 论坛 | 博客
  • 博客访问: 873997
  • 博文数量: 127
  • 博客积分: 3812
  • 博客等级: 中校
  • 技术积分: 1859
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 16:50
文章分类

全部博文(127)

文章存档

2015年(2)

2014年(9)

2013年(10)

2012年(25)

2011年(5)

2010年(35)

2009年(20)

2008年(21)

分类: WINDOWS

2012-08-08 11:28:54

Debugging Tools for Windows 学习使用心得

 

其实我的主要工作一直是UI test UI automation, manual test 等等。曾经跟领导提过想做些深入点的测试,领导则反问Kernel debugging 怎样?。这是一个非常有趣的问题,你因为不具备良好的kernel debugging的能力,所以不给你做深入的测试工作,而因为你没有做深入的测试使你也不可能具备kernel debugging的能力。很多时候事情就是如此矛盾的,而我也曾经说过,一切最终还得靠自己。
前几天发现一个奇怪的bug,分给这里的一个seniro dev他也没太多的办法。我在一个高手的指导下自己debug and figure outroot cause。在和这个高手的交流中,也基本明确了一下步的学习目标。以前的我主要是靠自己摸索,我想多跟高手接触,交流还是非常非常有帮助的,当然机会也不是很多。那么我的下一步的目标就是“code review, debugging, windows internal and WDM”Debugging可以说贯穿了其他的三个,因此我今天先谈谈我对debugging tools的感受。
我们基本都是用微软提供的几个debuggersntsd, cdb, kd, windbgntsdcbduser mode debugger, kdkernel mode debugger, 他们都是command line的,而windbgUIdebugger, 可以调试both user and kernel mode。大多数情况,我都是用windbg,但是在一些特殊的情况下,我还是需要其他的tools。今天我主要是谈windbg,我想学习windbg大概分这么几个阶段:
windbg
的命令,共三种命令,普通命令,加'.'的命令和加'!'的命令。Debugging tools自带的那个教程学习一下就应该差不多了,以后就靠经验积累了。
如何开始debug, 这要根据你所debug的目标和要debug的问题来决定了。你应该决定是使用user debugger 还是 kernel debugger, local debugging 还是 remote debugging, 是用windbg还是ntsd, 等等。通常都有几种方式去debug,你要能够准确选择一个最合适的。
怎样进行debug。对于一个需要debug的问题,你需要有你的策略。比如,在哪里设置断点,如何设置断点,等等技巧。
利用一些tools。有些情况下只有debugger还是很难debug,你需要使用其他的tools去辅助。比如,有的时候在问题显露的时候已经太晚了,你很难追踪问题发生时的情况。这里,你可以用一些tool使得在事情发生的时候跳到debugger上去。
Code review
非常重要。当你发现一个bug的时候,如果你代码熟悉,你可能直接就能想到问题出在哪里,或者你稍微读读代码就能发现问题所在,根本就不需要debugger。而在你debugging的时候,常常你也需要review相关的代码来理解这个问题。
汇编语言。当你在调试optimized code的时候,你常常不能通过dv, dt等命令正确地看参数,变量等等,或者变量根本就没得显示。这就需要你具备汇编语言的阅读能力,了解calling convention, 不同cpu的汇编,以及在disassembly模式去调试。
Kernel debugging
。如果你具备了以上的技能以后,user mode debugging应该不成什么问题了。但是对于调试kenrel mode还是需要一些附加的知识与技能。首先,kernel debugger的命令很多跟user mode的就不一样了,你需要学习。其次,你需要了解Windows internal的知识和数据结构,以及Windows driver model。这也是为什么我把Windows internal WDM作为两个学习要点。
最后引用高手的两句话,“debug一两年,你就没什么问题debug不了了只要能repro,你总能找到办法去debug”

 

 

 

 

如何使用Debugging Tools for Windows(简单的使用心得)分析蓝屏

windows发生蓝屏时,如果系统属性有下图设置,windows会自动生成minidump文件,该文件记录蓝屏生成代码和导致蓝屏出现的进程,通过windebug的软件来分析这个minidump文件.我们就可以找到蓝屏出错的原因了。这个文件保存目录是C:\windows\minidump文件夹,一般生成的名字为:Mini040108-01.dmp 这个就是指0841号的第一次蓝屏.

     (45.82 KB)

2008-9-24 16:29


     (34.74 KB)

2008-9-24 16:29

 

 

阅读(7115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~

1.安装debug工具

 

 

下载页面地址:.microsoft.com/whdc/devtools/debugging/installx86.mspx

 

选择合适的版本安装

     (22.8 KB)

2008-9-24 16:29

 

 

2.安装Symbols(特征库)

 

 

下载地址:.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx

 

推荐使用VISTAsymbol packages,解析的更详细

     (7.82 KB)

2008-9-24 16:29

 

 

3.添加Symbols

     (18.83 KB)

2008-9-24 16:29

 

 

Symbols的安装路径添加进去

 

     (34.6 KB)

2008-9-24 16:29

 

4.运行解析

     (25.53 KB)

2008-9-24 16:29

 

 

5.以下是一个例子

 

当时的蓝屏代码是0X0000000A,操作系统是XP SP2,是一个QQ引起蓝屏的问题

 

Loading Dump File [e:\!minidump\Mini032707-01.dmp]
Mini Kernel Dump File: Only registers and stack trace are available

 

Symbol search path is: F:\WINDOWS\Symbols
Executable search path is:
Unable to load image ntoskrnl.exe, Win32 error 2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Kernel base = 0x804d8000 PsLoadedModuleList = 0x805543a0
Debug session time: Tue Mar 27 08:12:47.390 2007 (GMT 8)
System Uptime: 0 days 0:18:24.941
Unable to load image ntoskrnl.exe, Win32 error 2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
Loading Kernel Symbols
.............................................................................................................................
Loading User Symbols
Loading unloaded module list
.............
*******************************************************************************
*                                                                                *
*                           Bugcheck Analysis                                       *
*                                                                                *
*******************************************************************************

 

Use !analyze -v to get detailed debugging information.

 

BugCheck 1000000A, {e1821a40, 2, 0, 805cf120}

 

Unable to load image npkcusb.sys, Win32 error 2
*** WARNING: Unable to verify timestamp for npkcusb.sys
*** ERROR: Module load completed but symbols could not be loaded for npkcusb.sys
Unable to load image hidusb.sys, Win32 error 2
*** WARNING: Unable to verify timestamp for hidusb.sys
*** WARNING: Unable to verify timestamp for HIDCLASS.SYS
Unable to load image USBPORT.SYS, Win32 error 2
*** WARNING: Unable to verify timestamp for USBPORT.SYS
Probably caused by : npkcusb.sys ( npkcusb 384 )

 

Followup: MachineOwner
---------

     (57.5 KB)

2008-9-24 16:29

 

 

由于npkcusb.sys不是系统文件可以选择删除他来解决

 

6.也有分析不出来的情况

    注:暂存的内容只能恢复到当前文章的编辑器中,如需恢复到其他文章中,请编辑该文章并从暂存箱中恢复;或者直接复制以上内容,手工恢复到相关文章。

  • 恢复到编辑器  关闭
      function sendPV(){ var pvTrack = new PvTrack(); pvTrack.type = 35; // 频道类别ID pvTrack.channel = 189; // 频道ID pvTrack.pageType = 0; pvTrack.track(); } window.setTimeout("sendPV()", 0); var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20237423-2']); _gaq.push(['_setDomainName', '.chinaunix.net']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? '' : '') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
      var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F0ee5e8cdc4d43389b3d1bfd76e83216b' type='text/javascript'%3E%3C/script%3E"));