08-调试引导加载程序、闪存代码
15.4.3 调试引导加载程序/闪存代码
开发人员在调试驻留于闪存中的代码时会遇到一些独特的挑战。最明显的一个限制是GDB和gdbserver合作设置目标断点的方式。当我们在第14章中讨论GDB远程串行协议时,你已经了解到了如何在一个应用程序中插入断点[5]。GDB是用一个架构相关的断点指令替换了断点位置上的原有指令。然而,在ROM或闪存中,GDB不能够修改原有指令,所以这种设置断点的方法就不起作用了。
[5] 请参考代码清单14-7。
大多数主流处理器都包含一定数量的调试寄存器,它们可用于绕开这个限制。这些功能是与具体的架构和处理器相关的,而且需要有硬件探测器的支持才能使用。在调试驻留于闪存或ROM中的代码时,最常用的技术就是使用JTAG硬件探测器。这些探测器能够利用处理器内部的调试寄存器来设置硬件断点。我们在第14章中详细介绍了这些内容,请参考14.4.2节以了解更多细节。