gpt4 book ai didi

c - SIGTRAP 尽管没有设置断点;隐藏硬件断点?

转载 作者:太空狗 更新时间:2023-10-29 16:24:30 27 4
gpt4 key购买 nike

我正在为一个STM32嵌入式系统调试这个软件。在其中一个函数中,我的程序不断遇到某种断点:

SIGTRAP, Trace/breakpoint trap

但是,在 GDB 中,当我执行 info breakpoints 时,我得到 No breakpoints or watchpoints。该断点实际上对应于我很久以前在另一个版本的可执行文件中设置的断点。当我设置该断点时,GDB 告诉我 automatically using a hardware breakpoint on read-only memory(或类似的消息)。

我认为硬件断点仍然在我的芯片上,尽管已经加载了新版本的软件。如果确实存在伪断点,我该如何定位并删除它?

最佳答案

好的。长答案:硬件断点通常是通过写入一些特殊的 CPU 寄存器来设置的。这是由 gdb 完成的。如果 gdb 死了,它可以保留那些安装在 CPU 中的。我猜你的实现(gdb)在连接到你的目标时既没有清除也没有检查它们。要找到它们,您需要列出 CPU 上硬件断点寄存器的内容(不知道如何在 STM32 上执行此操作)。解决方法(知情猜测)是这样的:使用 gdb 设置几个硬件断点(通常只有几个,很少超过 8 个),然后删除所有断点。这应该覆盖然后清除那些硬件寄存器。一旦你设置了这些断点(在删除它们之前),就“继续”(以防万一,因为 gdb 只在那个时候设置断点)。

关于c - SIGTRAP 尽管没有设置断点;隐藏硬件断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com