ARM Watch Point 寄存器
Watch Point (WP) 有 6 个寄存器:
- Address Value / Mask Register
- Data Value / Mask Register
- Control Value / Mask Register
其中,WP Address Value / Mask 是监控地址总线,WP Data Value / Mask 是监控数据总线。
断点用来标识某个地址上的一条指令,而观察点用来观察某个地址上的数据变化。
利用 WP 寄存器,可以实现硬件断点、软件断点以及观察点。比如:
1. 设置硬件断点
WP Control Value 寄存器的 nPOC 位置 0,表示取指令
在一个地址(比如 0x1234)设置一个断点:
* WP Address Value = 0x1234; WP Address Mask = 0x0
* WP Data Mask = 0xFFFFFFFF, 忽略 data
这样,当运行到地址 0x1234 处的代码时,进入调试状态。
这是一种非侵入型硬件实现的断点,调试器不需要干预。
2. 设置软件断点
WP Control Value 寄存器的 nPOC 位置 0,表示取指令
WP Data Value = 0xDEDEDEDE, WP Data Mask = 0x00000000
WP Address Mask = 0xFFFFFFFF,忽略 address
调试器的操作步骤:
- 在需要设置断点的地方,将其代码内容备份,并替换为 0xDEDEDEDE。这样,当执行到这个位置时,进入调试状态;
- 调试过这个位置以后,将该处内容恢复,并恢复程序运行;
3. 设置观察点
WP Control Value 寄存器的 nPOC 位置 0,表示数据访问
nRW = 0 (读) 1 (读写)
WP Address Value = 0x1234,WP Address Mask = 0x00000000
WP Data Mask = 0xFFFFFFFF
这样,对地址 0x1234 的数据进行读写时,进入调试状态。
参考资料
- 《ARM JTAG 调试原理》
- https://www.fpga4fun.com/JTAG.html