[英]Program received signal SIGTRAP, Trace/breakpoint trap
我正在调试一个(嵌入式)软件。 我在一个函数上设置了一个断点,出于某种原因,一旦我到达那个断点并continue
,我总是回到这个函数(这是一个只应该被调用一次的初始化函数)。 当我删除断点并continue
时,GDB 告诉我:
Program received signal SIGTRAP, Trace/breakpoint trap.
由于我正在使用断点,我假设我陷入了“断点陷阱”。 什么是断点陷阱?
断点陷阱只是意味着处理器已经到达断点。 为什么会发生这种情况有两种可能性。 最有可能的是,您的初始化代码被命中,因为您的 CPU 正在重置并再次命中断点。 另一种可能性是您设置断点的代码实际上是在初始化以外的地方运行的。 有时,通过积极的编译器优化,很难准确判断断点映射到哪些代码以及哪些执行路径可以到达那里。
我能想到的另一种可能性是:
1.您的进程正在运行多个线程。
例如 - 2 说 x 和 y。
2.线程 y 到达断点,但您已将gdb 附加到线程 x。
这种情况是跟踪/断点陷阱。
我在 Visual Studio 2015 中运行 linux 项目并远程调试时遇到了这个问题。 我的解决方案是project_properties -> 配置属性 -> 调试 -> 调试模式并将值从“gdbserver”更改为“gdb”
如果您使用 V BAT 作为备用电源并且您的备用电压低于 1.65V,那么在连接到电源后您会遇到同样的问题。
在这种情况下,您必须断开所有电源并以正确的电压水平重新连接。 然后调试问题就消失了。
我遇到了同样的问题,就我而言,解决方案是降低 SWD 频率。 (我在MCU和主机之间有焊接人员,不太可靠)我将4000k改为100k,问题就消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.