VC6的数据断点功能是如何实现的
可以使用CPU的调试寄存器来实现变量监视和数据断点。但并不是所有调试器的数据断点功能都是使用调试寄存器来实现的。举例来说,WinDBG的ba命令以及VS2005的C/C++调试器都是使用调试寄存器来设置数据断点的,但是VC6调试器不是这样做的。一旦设置并启用了数据断点,VC6调试器便会记录下每个变量的当前值,然后以单步的方式恢复程序执行,这样,被调试程序执行一条汇编指令后便会因为调试异常而中断到VC6调试器,VC6调试器收到调试事件后会读取断点列表中的每个数据变量的当前值,并与它们的保存值相比较,如果发生变化,那么说明该断点命中,VC6会显示图4-6所示的对话框。如果没有变化,那么便再设置单步标志,让被调试程序再执行一条指令。

图4-6 VC6显示的数据断点命中对话框
当显示以上对话框时,修改变量那条指令已经执行完毕,所以按OK后,调试器显示的执行位置箭头指向的是导致变量变化的代码的下一行。
由于VC6的数据断点功能不是使用调试寄存器设置的,所以没有数量限制,但这种实现方法的明显缺点是效率掉,会导致被调试程序运行速度变慢。