问题描述:
gdb 调试zephyr程序的时候,之前下过的某个断点,monitor reset 后重新跑,竟然会一直触发这个断点,虽然b命令已经列出当前没有break point,一直卡在这里 continue 和 next 都走不下去
问题解决:
from stack overflow 的答案:
Ok. Long answer: Hardware breakpoints are usually set by writing to some special CPU registers. This is done by gdb. If gdb dies, it can left those installed in CPU. I guess your implementation (of gdb) does not either clear or examine those, when it connects to your target. To locate them, you would need to list the contents of hardware breakpoints registers on your CPU (don't know how to do this on STM32). Workaround would be (informed guess) be this: set few HW breakpoints (typically there are only a few, seldom more than 8) using gdb, then remove all of them. This should overwrite and then clean those hw registers. Once you do set those breakpoints (before removing them), do "continue" (just in case, as gdb sets breakpoints only at that time).
知道原因后,果断板子断电重启就解决了,中间试过板子的reset按钮竟然不行必须断电,显然板子的reset并不会给cpu断电,导致cpu寄存器的值还在的原因