《软件调试》的第1篇名为“绪论”,只包含一章,共26页,是全书最短的一篇。
第一篇要实现的几个目标是:
1)介绍基本概念和术语,为后面各篇打基础和做铺垫。比如,1.1.1节给出了Bug和Debug的定义,1.6节详细的讨论了BUG,1.4节介绍了常见的软件调试型态。
2)浏览本书要介绍的主要调试技术,比如,1.5节分10个专题(三级小节)浏览了本后后面要深入讨论重要调试技术。
3)突显软件调试技术的关键特征和重要性,1.2节(基本特征)和1.7节(与软件工程的关系)都是服务于这个目的的。
更多...
除了串行口、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传递数据。
更多...
大家都知道,对于位于当前调试目标中的指令,可以使用WinDBG的u命令进行反汇编。u命令的参数是要反汇编代码的地址值或者符号,如果不指定,那么WinDBG会使用当前程序指针寄存器所指向的代码,例如:
0:001> untdll!DbgBreakPoint:7c901230 cc int 37c901231
更多...
我在《软件调试》一书的2.7节介绍了CPU的分页机制,因为这属于这本书的支持性内容,考虑篇幅限制,没有介绍启用PAE的情况。书出版后,很多读者对这一内容很感兴趣,也有读者遇到了启用PAE的情况。因此决定写这篇短文来介绍一下PAE的概况,以及如何在启用PAE后的系统中做2.7.5节的试验。
PAE是Physical Address Extension的缩写,即物理地址扩展。简单来说,就是把IA-32处理器的寻址能力从原来的4GB扩展到64GB。寻址4GB空间,要求物理地址的宽度为32位。类似的,要寻址64GB空间,那么物理地址的宽度就是36位。因为这个原因,PAE又被称为PAE-36bit。
更多...
今天收到了编辑部快递给我的《软件调试》!
下班一进门,就看到了邮包,迫不及待的打开外面的包装后,里面是印有博文标记的纸袋,包裹的严严实实。因为《软件调试》的体型比较大,所以将其从纸袋中取出来还是费了点劲,也许是因为我有些激动。:-)
小女儿跑过来,要拿过来看一看,抱在怀里没走几步就喊重,显然这本书对她来说是有些重(后来称了下,1800克:-))。我把书接在手中,看着好亲切。仔细看了封面和封底后,大致翻阅了一下序言和正文,字体、行距、代码和插图看着都很舒服。特别是我担心的几幅插图,印刷出来后也很清晰。接下来,我想对它做一个“压力测试”。把书翻到差不多中间一页,向两侧用力掰了掰,然后再合上,看看书脊,没留下任何印记。看来装订的很牢固(不比担心像有些书那样一本被翻成几本)。而且翻开到中间页时,两边两页的文字都清楚可见。这样检查一番后,心中悬了许久的石头落地了。或者说持续了三年多的一次马拉松长跑终于到终点了。
更多...
在下面这小段代码中,存在一个故意的除零操作,并且使用了Windows操作系统的结构化异常处理(SEH)机制对其进行了保护。
59: n=1;
60: m=0;
61: __try
62: {
63: n=n/m;
更多...
不知道这是不是第一届PDC大会,但可以看到很多重量级的人物在其中演讲。再也不会有这样的PDC了!
Microsoft Win32 Professional Developers Conference VideotapesMicrosoft University is pleased to announce the availability of a set of 22 videotapes of key sessions from the Win32 Professional Developers
更多...
大家一定听说过刷系统BIOS、刷网卡(上面的firmware)、刷显卡。其实CPU也是支持并可以刷新升级的。
随着CPU复杂度的不断提高,以及一些复杂指令(如多媒体和浮点运算)的引入,测试CPU的复杂度也在成倍提高。再加上集成芯片的生产特征使得可以通过软件刷新产品化的CPU成为必要。
刷新的具体过程和刷其它firmware很相似,通常是由BIOS程序在POST的早期阶段通过CPUID指令把新的数据(2048字节)更新到CPU内部的可擦写ROM上。
不过也有工具可以在操作系统启动后来更新(http://www.urbanmyth.org/microcode/)
更多...
听说过Captive么?简单说它是Linux下完全读写NTFS文件系统的一个免费方案。因为其它Linux下的免费NTFS驱动大多在写NTFS文件系统时会有问题。所以这个Captive号称彻底解决了这一问题,因此受到很多人的特别青睐。之所以能彻底解决问题呢?原因是使用微软的NTFS驱动来访问NTFS文件系统,可谓原汤化原食!
那么如何让NTFS驱动在LINUX下跑起来呢?很多人自然想到虚拟机技术。但是细想仍然有问题,如果使用虚拟机,那么虚拟机里的NTFS驱动如何与作为HOST OS的LINUX进行文件操作这样的密集型通信呢,岂不是很慢?
更多...
Tom Shanley这个名字对国内的很多人来说可能还有些陌生,但是对他写的书也许很熟悉。
随意GOOGLE一下,就得到下面一个列表。
1. Unabridged Pentium 4, The: IA32 Processor GenealogyBy Tom Shanley2. PCI Express System ArchitectureBy Ravi Budruk, Don Anderson, Tom Shanley 3. InfiniBand
更多...