【发布时间】:2012-04-07 22:02:17
【问题描述】:
我正在为 STM32 嵌入式系统调试这个软件。在其中一个函数中,我的程序不断遇到某种断点:
SIGTRAP,跟踪/断点陷阱
但是,在 GDB 中,当我执行 info breakpoints 时,我得到 No breakpoints or watchpoints。断点实际上对应于我很久以前在另一个版本的可执行文件中设置的断点。当我设置断点时,GDB 告诉我automatically using a hardware breakpoint on read-only memory(或类似的消息)。
我认为硬件断点仍然在我的芯片上,尽管已经加载了新版本的软件。如果确实存在虚假断点,如何定位并移除?
【问题讨论】:
-
重置 CPU。 :) (如果 gdb 死掉或者它在退出/重新连接时没有删除所有现有断点,则可以保留安装硬件断点)。
-
请注意,调试寄存器可能会在某些类型的复位中持续存在。不过,完全开机重置肯定会清除它。
-
“完全上电复位”是什么意思?我试过拔掉/重新插入,但断点仍然存在。
-
所以,如果我理解的话,你已经在你的嵌入式系统上循环了电源(并且没有备用电池),关闭了你的 jtag 接口/ICE 的电源并且断点仍然被命中?
-
@dbrank0:是的。好吧,至少 GDB 告诉我我有一个 SIGTRAP,我将其解释为断点。
标签: c gdb embedded breakpoints stm32