<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

文章分类

导航

订阅

Debug Methodology

Practice and Thoughts on More Effective Debugging
调试笔记:双误异常导致的蓝屏(二)
书接上回,今天继续分析双误异常导致的蓝屏。上次说到因为发生双误,CPU动用硬件的任务切换机制,切换到了专门用于处理双误异常的新线程。在分析了TSS结构和栈回溯中的TSS信息后,我们找到了切换回本来触发双误线程的方法,也就是执行.tss 28命令。 0: kd> .tss 28eax=f655d5d4 ebx=af0d4180 ecx=00000000 edx=af0d2081 esi=80460dd0 edi=f655d7d4eip=aebc6af2 esp=f655cfb8 ebp=f655d7dc 更多...

发布于 2010年4月5日 23:36Raymond2 篇评论

调试笔记:双误异常导致的蓝屏(一)
网球里有个术语叫双误,英文叫double fault。简单说,就是发球失误了一次之后,第二次发还失误。一次失误可以理解,第二次还失误,那么只好不客气了。类似的,在IA-32 CPU中,也有个双误,double fault,是一种异常,向量号是8,属于终止类(Abort)异常,一旦发生,问题就很严重。 老雷不会网球,因此下面讨论的都是计算机中的双误。 简单来说,双误就是发生了一个比较严重的异常后,还没处理完,就又发生了第二个比较严重的异常。用句成语,就是一波未平一波又起。为什么要在异常前面加上一个“比较严重”的限定呢?因为对于不严重的异常,那么CPU是可以分而治之,逐一把它们搞定的,只有当CPU无法逐一处理时,它才会抛出双误异常,意思是,“这他妈的也太糟糕了,按下葫芦起来瓢,老子不干了”。 更多...

发布于 2010年3月28日 18:41Raymond4 篇评论

老雷看Win7(4)——发疯内幕
【本文曾发表在《程序员》杂志的调试之剑专栏中】 现代人生活在重重压力中,有时压力太大无法忍受时,便以疯狂的方式来释放压力,有的大喊大叫,有的打人骂人,也有动刀动枪的……其实软件世界也有类似的问题,随着软件被应用到越来越多的重要岗位,人们对软件的期望也越来越高:要长的漂亮,有华丽的外表;要跑的快,反应神速;要功能强大,啥都能干;要灵活通用,能在所有带CPU的盒子上跑;要坚韧鲁棒,能适应千差万别的使用环境;要开放,能以有线无线、局域网、互联网等各种方式通信;而且还要安全,铜墙铁壁,百毒不侵……看看人们对软件的这些要求,您说软件的压力大不大?在如此重负下,软件也难免会有“发疯”的时候。 更多...

发布于 2010年1月24日 21:32Raymond6 篇评论

互联网时代话读书
随着互联网的不断发展,网络上的内容日益丰富,有人开始认为,“今天什么东西网上都查得到,所以没有必要读书了”,但我一直不这么认为,我觉得网络浏览不能取代读书。网络内容更新速度快,内容新,而且广泛,所以适合速查和泛读,但是不适合精读和系统学习。 首先,网络上的内容很零散,通常是这里找到一篇,那里找到一段。有的是帖子,有的是博客,有的是新闻,有的是广告;有的是一篇文件的概要,有的是从一篇完整文章中节选出来的部分段落,难免有时断章取义。因为这种零散性,网络内容大多只适合启发思路或者扩大视野。 第二,网络内容的质量参差不齐,有好有坏,有些是不准确的甚至是错误的。因为这个原因,网络内容适合具有较强辨别力和判断力的“老手”去伪存真,百尺竿头更进一步,不适合新手“摸索入门”。因为新手可能“四顾皆茫然”,不知所云,宝贵的兴趣可能被打消掉,或者被误导。 更多...

发布于 2010年1月10日 13:16Raymond1 篇评论

润物细无声——Windows Intermals第5版印象
前两天拿到了Windows Internals的第5版,把玩了一番后,这两天仔细读了部分章节,与大家分享如下。 以作者在鸣谢一节的落款中的时间来看,上一节的时间是2004年9月,这一版的时间是2009年5月。二者相差不四年半有余。与很多写书计划和软件项目类似,这一版也是延迟了多次。但是好饭不怕晚,看了书之后,的确觉得改动和新增的内容不少。 单单从页数来看,第4版是935页,包括书后的索引,而第5版是1232页,多了297,差不多是一本普通技术书的长度。 从副标题来看,上一版的副标题叫Micorosoft 更多...

发布于 2009年7月19日 15:29Raymond10 篇评论

[WinDBG]新闻组拮趣之私有符号
在Windows底层开发圈里,OSR的几个邮件新闻组很是有名。具体来说就是讨论调试的windbg,讨论一般驱动开发问题的ntdev和讨论文件系统有关问题的ntfsd。 浏览这些新闻组的邮件是我闲暇时的一件乐事。除了可以了解信息、学到一些知识和技巧外,还可以提高英文,领略地道的美式幽默,或者看如何用英文“发牢骚”和“斗嘴”。 很早就想把阅读这些新闻组的收获写成短文与大家分享,但是都没有真正实施。今天算做这个系列的正式开始吧! 首先,一位名为Joe的先生发出信息求助,遇到的问题是找不到可以用于Server 更多...

发布于 2008年9月24日 22:16Raymond1 篇评论

调试笔记之调试WinPE
WinPE是Windows Preinstallation Environment 的简称,简单理解就是不需安装就可以使用,可以直接在只读介质上启动的Windows。比如,Vista的安装光盘上就包含了一个WinPE,系统修复功能就是工作在WinPE环境中的。 从软件实现的角度来看,WinPE与普通的Windows是共享主要源代码的,但是有些逻辑是专门针对WinPE的,这可以通过编译选项来控制这种差异。 因为内核的主要代码都是相同的,所以WinPE也有内核调试支持。当在BOOTMGR阶段按F8选择Debug 更多...

发布于 2008年9月12日 20:35Raymond0 篇评论

《软件调试》导读之绪论篇
《软件调试》的第1篇名为“绪论”,只包含一章,共26页,是全书最短的一篇。 第一篇要实现的几个目标是: 1)介绍基本概念和术语,为后面各篇打基础和做铺垫。比如,1.1.1节给出了Bug和Debug的定义,1.6节详细的讨论了BUG,1.4节介绍了常见的软件调试型态。 2)浏览本书要介绍的主要调试技术,比如,1.5节分10个专题(三级小节)浏览了本后后面要深入讨论重要调试技术。 3)突显软件调试技术的关键特征和重要性,1.2节(基本特征)和1.7节(与软件工程的关系)都是服务于这个目的的。 更多...

发布于 2008年8月24日 17:12Raymond2 篇评论

深夜杂感
《软件调试》面世后,得到了很多读者的好评,这是我写作这本书得到的最大快乐和收获。但是最近在China-pub网站上,却有人不断的挑剔,首先是批评定价高。我尝试做了几次解释,但是无济于事,于是决定不予理睬,省下时间做些更有意义的事。 但是今晚我意外的看到,有人在批评David所写的序言,指责David“没怎么看的书也作序推荐”,而且对David使用了很粗劣的语言。看了这样的评论后,我真的很气愤。思考良久,做了如下回复: “David是在看了详细的英文目录和简介后写了上面的短评。他写的都是客观的事实(包括覆盖面、篇章结构、深度等在详细的三级目录中都是可以看得出的呀)和他的感受。我和David的交往并不很多,在他看了书的初步框架后,他就对书的内容很感兴趣,乐意为这本书写序,今年4月书即将完成,我又给他写信时,另外意外的是,他竟然说在他的Outlook里已经有了一个reminder。我想他这样的名人能动笔主要是因为这本书的主题吸引了他。凭借他的资历,他早已认识到了调试的重要性。他对自己感兴趣的东西说几句话何过之有?至于这本书到底怎么样,你完全可以自己来判断,可以看样章,也可以参考其他读者的讨论(http://advdbg.org/forums/75/ShowForum.aspx)。David是国际知名的操作系统专家,备受世界各地技术人员的尊重,不知你资历如何,竟对他出言不逊?难道他不懂中文,你就可以轻易使用中文的词汇来骂他么?语种的差异其实很多时候并不是障碍,真诚和至善很容易打破这个障碍,同时这个障碍也遮不住低俗和丑恶。” 更多...

发布于 2008年8月16日 0:50Raymond12 篇评论

奥运精彩之举重若轻
这几天大家都忙着看奥运,我也不例外。周六上午从头到尾观看了女子48公斤级举重比赛。今天又看了男子56公斤级举重比赛的后半截。两场比赛看下来,一个很深的感受是,两位冠军赢得都是非常的“轻松”。首先是甩开第二名的差距很大,都是在比赛还没有进行完的时候就稳操胜券了。另外,两个人在比赛时都神情自若,有闲庭信步的轻松自如劲。 在女子48公斤级的比赛中,很多选手在抓举重量过了80公斤后便开始力不从心了,纷纷失败,特别出人意料的是,上届冠军土耳其选手塔伊兰在82公斤和84公斤两个重量上三次试举都以失败结束,失去分数,无缘继续比赛。这时,陈燮霞还没有出场,因为她要的开把重量就是92公斤。在杠铃重量升高到90公斤时,陈燮霞出场了,可能是教练看到场上的形势变化后,也开始追求稳妥。这时,很多人(包括看电视的我)也都为陈燮霞捏把汗,要是举不起来就完了(:-))。但是陈燮霞很快就让这种担心变成多余,她非常轻松的举起了接近她体重两倍的杠铃。随后她又举起了93公斤和95公斤两个重量,以完美的表现结束了抓举比赛。在之后的挺举比赛中,陈燮霞依然赢得非常轻松,先是轻松的举起了锁定胜局的103公斤,而后又有惊无险的举起了105公斤和117公斤,夺得了冠军的同时,也改写这个项目的奥运会纪录。 更多...

发布于 2008年8月10日 22:53Raymond1 篇评论

内核调试的EXDI方式
除了串行口、1394和USB 2.0这些链接方式外,WinDBG还支持一种很特殊的连接方式来做内核调试。这种方式被称为EXDI,通常写为eXDI。简单来说,EXDI是WinDBG与硬件调试器协同工作的一个接口。 《软件调试》的第7章介绍了JTAG调试协议和Intel CPU的JTAG支持,即ITP/XDP接口。ITP调试器借助专用的硬件设备(ITP调试仪)通过CPU的专用信号引脚与CPU通信,实施调试任务。 ITP/XDP调试器都有自己的软件,可以观察内存、设置断点、接收CPU的事件等。但如果使用ITP调试器调试Windows操作系统或者其中的驱动程序时,一个明显的问题便是难以处理调试符号和支持操作系统相关的观察功能,比如WinDBG的那么多个扩展命令所提供的功能。于是,一种很自然的想法便是把ITP调试器当作一种读写数据的特殊连接方式,让其为WinDBG传递数据。 更多...

发布于 2008年8月6日 21:30Raymond1 篇评论

《软件调试》导读之提纲挈领
拙作《软件调试》出版两个月了,有热心读者建议我讲些阅读这本书的方法。有读者愿意读自己的书,当然是好事,再说读者是客户,他们的意见就是命令,不能怠慢。粗略思考一番,计划先为《软件调试》的每一篇写一个导读短文。总为开篇,今日先谈谈《软件调试》这本书的篇章结构,用软件的术语就是架构,用写作的术语也就是提纲。 从最初的书名说起 早在2003年,我就萌生了写一本关于软件调试的书的念头。但是软件调试是个大话题,有很多东西可以写,必须选择好一个角度才能写出一本好书来。于是我开始搜索当时已经有的书,无论是美国出的,还是英国出的,一共找到了十来本。而后,逐一了解了已有的这些书,归纳了它们的主要内容和特色。 更多...

发布于 2008年8月2日 10:55Raymond3 篇评论

Showstopper中文版签约
好消息,今天一早看到了Gregg的来信,他兴奋的告诉我机械工业出版社(华章)已经购买了Showstopper中文版的版权,双方正式签约。因此,这本英文名著的中文版本应该在今年年内就能与大家见面了。:-) 接下来应该是比较艰辛的翻译工作。这本书首先是一本好的报告文学,作者笔触灵动,妙语连珠,因此最好有一位文科的人来翻译。但同时,这本书又涉及到较深的技术和对软件工程的深刻思考,所以翻译的人还是要懂计算机。 书名也体现了这一点!不论是主标题和副标题都不那么容易翻译!:-)欢迎大家来试一试呀! 主标题: 更多...

发布于 2008年3月14日 23:12Raymond1 篇评论

迎接2008!
2008年的第一天,阳光灿烂!对于上海这个多阴多雨的城市,这冬日的阳光着实是为新的一年送了一份厚礼! 每个人对新的一年都会有很多期待,北京奥运会无疑是最有共性的一个。于我,《软件调试》的出版是第一号的期待。一些热心的朋友也在期待这本书,他们的期待是我的动力。 以下是《软件调试》一书的主要内容,全书共30章,分为六篇。 第一部分:绪论(第1章)作为全书的开篇,这一部分介绍了软件调试的概念、基本过程、分类、和简要历史,并浏览了本书后面将详细介绍的主要调试技术。 第二部分:CPU的调试支持(2~7章)CPU是计算机系统的硬件核心。这一部分以IA-32 更多...

发布于 2008年1月1日 10:21Raymond5 篇评论

它山之石,可以攻玉
泰克(http://www.tek.com/)是全球著名的测试测量仪器生产厂商,它的最著名产品是示波器。从调试的角度来看,示波器对于硬件工程师来说就好像是软件工程师使用的调试器。 在硬件领域,已经形成了一个不算太小的产业来专门生产以示波器、逻辑分析仪为代表的测试和调试设备,人们愿意以高昂的价格来购买这些设备,厂商们也不断的加大投入来研发更好、更先进、价格也更昂贵的设备。 与硬件领域相比,软件领域中人们对调试的重视真是天壤之别。著名的SoftICE在去年宣布停止开发了(看高手们对此是多么伤心http://blogs.msdn.com/matt_pietrek/archive/2006/04/07/570927.aspx)。Syser的开发还在维持,但是开发者最大的顾虑不是技术难度,而是客户太少。 更多...

发布于 2007年11月28日 20:14Raymond0 篇评论

CpuWhere
IA-32 CPU从P6开始便支持分支监视和记录机制。说白了这种机制就是记录下CPU曾经执行的分支。把这些分支信息串联起来便可以得到CPU的执行轨迹。这一机制的名称被称为BTS,Branch Tracing Store,它与Debug Store,简称DS有着紧密关系。 以下是使用BTS机制所编写的一个示例程序CpuWhere的工作画面。 窗口左侧是一系列控制按钮,编辑框用来指定BTS缓冲区可以容纳的BTS记录数,也就是SetupDSArea函数的参数。窗口右侧的列表框用来显示从驱动程序读取到的BTS记录。显示的顺序与栈回溯类似,最近发生的在上方。或者说,CPU的运行轨迹是从下到上。 更多...

发布于 2007年10月28日 22:29Raymond3 篇评论

关于调试的博客
1,Mike Stall's .NET Debugging Blog http://blogs.msdn.com/ntdebugging/ 2,使用WinDbg调试.Net http://blogs.msdn.com/tess/default.aspx 3,Microsoft Critical Problem Resolution (CPR)团队,Microsoft Advanced Windows Debugging and Troubleshooting http://blogs.msdn.com/ntdebugging/ 更多...

发布于 2006年12月22日 14:09admin0 篇评论

A good explanation about why checked build?
Don Burn: ...the checked build of Windows when they pry it from my cold dead workstation. This artical is abstracted from?WHDC website by Don. The checked build of Windows is the Rodney Dangerfield of Redmond, "It don't get no respect," even from many 更多...

发布于 2006年5月12日 22:22Raymond0 篇评论

通过XP的新命令行工具查询DRIVER信息
Windows XP附带了一个很好的小工具driverquery,使用它可以很轻松的查询出本机或远程系统中的驱动信息。尤其是给系统管理员和驱动程序开发人员带来了很大方便。 Driverquery是个控制台程序,位于Windows系统的system32目录下(大小50多K),因此你可以在任何控制台窗口运行它。 不带任何参数,便可以列出目前系统中已经加载的所有驱动,是按名字列出的。 Module Name  Display Name           更多...

发布于 2006年5月12日 22:21Raymond0 篇评论

Deploy new driver builds to debuggee machine
When we debug kernel drivers through a 1394 or COM cable using windbg, we can use .kdfiles command to transfer new driver build to the debuggee machine from the debugger machine or a share foler at any place accessable. The steps are as below. 1, Create 更多...

发布于 2006年5月12日 22:19Raymond0 篇评论

Profiling的中译
近日一直在想Profiling的中译问题,百思不得其解,于是Google之,乐趣感慨颇多。 Profiling是Profile的动名词,因此很多英文字典对Profiling的解释就是“produce a profile of”: 1 : to represent in profile or by a profile : produce (as by drawing, writing, or graphing) a profile of2 : to shape the outline of by 更多...

发布于 2006年5月12日 22:14Raymond0 篇评论

BugCheck END_OF_NT_EVALUATION_PERIOD (98)
0: kd> !analyze -v********************************************************************************                                                                             更多...

发布于 2006年5月12日 21:41Raymond0 篇评论

使用Virtual PC进行Windows内核调试的详细过程
使用WinDbg进行Windows内核调试通常需要两台计算机,一台是Debuggee,一台作为Debugger,又成为Host。使用Virtual PC可以在同一台电脑上进行内核调试,对于某些调试任务来说还是非常有用的。 下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程。 1,下载并安装Virtual PC 2004,从略。 2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘、内存等参数。 更多...

发布于 2006年4月27日 21:19Raymond2 篇评论

融合--Oracle技术日有感
因为近几年来一直在做系统底层的开发,为了不被顶层的技术发展所抛弃,抱着了解一下的态度参加了Oracle在上海举办的技术大会,大会的名称叫《信息决定企业成败—Oracle技术高峰论坛2006》。 我粗略估计一下,大约有500人参加了这次大会。会议上午的议程是所有人参与的主题演讲,下午按行业分为四个分会场。我听了上午的全部演讲,感觉还是有些收获的。 收获之一:Oracle融合架构(OFA),全称即Oracle Fusion Architecture。该架构从下至上将企业的数据应用分为以下数层。 更多...

发布于 2006年4月1日 14:00Raymond0 篇评论

KeBugCheck2的第6个参数
大家知道,DDK公开了两个内核API用于产生BSOD,分别是KeBugCheck()和KeBugCheckEx()。其原型分别如下: VOID   KeBugCheck(IN ULONG  BugCheckCode    ); VOID   KeBugCheckEx(IN ULONG BugCheckCode,    IN ULONG_PTR  BugCheckParameter1,    更多...

发布于 2006年3月13日 10:38Raymond1 篇评论

WinDbg不同版本间的主要差异
近一两年来,WinDbg的版本更新差不多每月都有,这种速度也侧面证明了微软内部对WinDbg的重视,否则不会升级这么快吧?而且可以看出其发展是和微软的其它技术发展同步的。比如DotNet热时WinDbg的那几个版本加了很多对调试托管代码的支持,64位热时,WinDbg便加入对WOW64的支持。无疑微软的很多内部团队也在使用WinDbg做调试。当他们发现问题或有新的要求时就会让WinDbg改正或加入。 版本升级这么快,有时真的不知道每个版本到底有什么变化,该不该升级?还好微软的站点上有一个简单的列表关于每个版本的变化。但这个LISt已经不包括6.2以前的版本(大约是05年3月)了。说不定现在包括的版本过几个月也不见了。赶紧贴过来吧! 更多...

发布于 2006年3月7日 2:35admin1 篇评论

关于驱动开发的几个必读BLOG 票数 优秀 [5 out of 5]。
对于从事Windows驱动开发的朋友,或者是对Windows内核感兴趣的朋友,以下几个BLOG值得经常看看! 1,Kernel Mustard by Steve Dispensa link: http://kernelmustard.com/category/ddk/ 他以前的BLOG地址为:http://msmvps.com/blogs/kernelmustard/default.aspx 2,Larry Osterman's WebLog - Confessions of an 更多...

发布于 2006年3月2日 14:52admin1 篇评论

HOST文件在调试中的作用
HOST文件是本机上的一个域名与IP映射表,在DNS客户端与远程的DNS服务器进行域名前会先查阅这个文件。如果查找到了结果,那么就不去DNS服务器查了。因此HOSTS文件具有更高的优先级,这恰恰我们调试创造了一个极好条件。   比如我们在希望在本机跟踪网络服务或网页代码。通常我们用 http://localhost/advdbg/default.aspx 这样的链接来启动调试过程。 但是有时,调试一些与域名有关的问题,我们希望用正式的域名也可以进行跟踪。这时便可以使用HOSTS文件将本来要发动远程服务器的请求定向到本地来。方法就是在HOSTS文件中加入相应的重定向,如下例所示: 更多...

发布于 2006年1月11日 21:35dbg0 篇评论

学习软件调试原理的意义
曾经一度我面试应聘者的一个问题就是调试断点的工作原理,令我非常遗憾的是,无论是刚毕业的本科生或研究生,还是有多年工作经验的老程序员,都未能给我一个满意的答案。 当我与一些朋友聊起这个话题时,我遇到一种说法,令我深思。这种说法是我知道这个有什么意义呢? 是啊,现今是个知识爆炸的年代,新技术、新理念层出不穷,我们必须有选选择,目标明确的取舍自己的学习和努力方向。 但是,在这个前提下,我仍然认为调试原理是每个程序员的一门必修课。这不是我的一家之言,很多资深的行业专家,他们也在各种场合发表过类似的观点。 更多...

发布于 2005年10月13日 22:49dbg2 篇评论

Powered by Community Server Powered by CnForums.Net