Stamp of Software Debugging
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
navigation bar seprate line
第2篇 CPU的调试支持

如果把程序(Program)中的每一条指令看作是电影胶片的一帧,那么执行程序的CPU就像是一台飞速运转的放映机。以英特尔P6系列CPU为例,其处理能力大约在300(第一代产品Pentium Pro)~3000(奔腾III)MIPS之间, MIPS的含义是CPU每秒钟能执行的指令数(以百万指令为单位)。如果按3000 MIPS计算,那么意味着每秒钟大约有30亿条指令“流”过这台高速的“放映机”。这大约是电影胶片放映速度(24帧每秒)的1.25亿倍。如此高的执行速度,如果在程序中存在错误或CPU内部发生了错误该如何调试呢?

CPU的设计者们一开始就考虑到了这个问题——如何在CPU中包含对调试的支持。就像在制作电影过程中人们可以慢速放映或停下来分析每一帧一样,CPU也提供了一系列机制允许一条一条地执行指令,或者停在指定的位置。

以英特尔的IA结构CPU为例,其提供的调试支持有。

  • INT 3指令:又叫断点指令,当CPU执行到该指令时便会产生断点异常,以便中断到调试器程序。INT 3指令是软件断点的实现基础。
  • 标志寄存器(EFLAGS)中的TF标志:陷阱标志位,当该标志为1时,CPU每执行完一条指令就产生调试异常,陷阱标志位是单步执行的实现基础。
  • 调试寄存器DR0~DR7:用于设置硬件断点和报告调试异常的细节。
  • 断点异常(#BP):当INT 3指令执行时,会导致此异常,CPU转到该异常的处理例程。异常处理例程会进一步将异常分发给调试器软件。
  • 调试异常(#DB):当除INT 3指令以外的调试事件发生时,会导致此异常。
  • 任务状态段(TSS)的T标志:任务陷阱标志,当切换到设置了T标志的任务时,CPU会产生调试异常,中断到调试器。
  • 分支记录机制:用来记录上一个分支、中断和异常的地址等信息。
  • 性能监视:用于监视和优化CPU及软件的执行效率。
  • JTAG支持:可以与JTAG调试器一起工作来调试单独靠软件调试器无法调试的问题。

除了对调试功能的直接支持,CPU的很多核心机制也为实现调试功能提供了硬件基础,比如异常机制、保护模式和性能监视功能等。

本篇首先将概括性地介绍CPU的基本概念和常识(第2章),包括指令集、寄存器及保护模式等重要概念。然后介绍与调试功能密切相关的中断和异常机制(第3章),包括异常的分类,优先级等。这两章的内容旨在帮助读者了解现代CPU的概貌和重要特征,为理解本书后面的章节打下基础。对于了解CPU较少的读者,应该认真阅读这两章的内容。对于其他读者,这些内容可以作为复习资料和温故知新。第4章将详细讨论软件断点、硬件断点和陷阱标志的工作原理,从CPU层次详细解析支持常用调试功能的硬件基础。第5章将介绍CPU的分支监视、调试存储和性能监视机制。第6章将介绍CPU的机器检查机制(Machine Check Architecture),包括机器检查异常和处理方法等。第7章将介绍JTAG原理和IA-32 CPU的JTAG支持。

navigation bar seprate line
Copyright (C) 2008-2013 Raymond Zhang, All Rights Reserved