程序接收信号SIGTRAP,跟踪/断点陷阱

时间:2012-03-21 17:05:34

标签: c gdb embedded arm

我正在调试一个(嵌入式)软件。我在一个函数上设置了一个断点,由于某种原因,一旦我到达那个断点并且continue我总是回到函数(这是一个初始化函数,只能被调用一次)。当我删除断点和continue时,GDB告诉我:

Program received signal SIGTRAP, Trace/breakpoint trap.

由于我正在使用断点,我假设我陷入了“断点陷阱”。什么是断点陷阱?

4 个答案:

答案 0 :(得分:13)

我能想到的另一种可能性是:

1.您的流程正在运行多个主题

例如 - 2说x&收率

2. 线程y遇到断点,但您有将gdb附加到线程x。

这种情况是跟踪/断点陷阱。

答案 1 :(得分:10)

断点陷阱只是意味着处理器遇到了断点。为什么会发生这种情况有两种可能性。最有可能的是,您的初始化代码被命中,因为您的CPU正在重置并再次点击断点。另一种可能性是,设置断点的代码实际上是在初始化以外的位置运行的。有时使用积极的编译器优化,很难准确判断断点映射到哪个代码以及哪些执行路径可以到达那里。

答案 2 :(得分:1)

我在Visual Studio 2015中运行linux项目并远程调试时出现此问题。我的解决方案是 project_properties - >配置属性 - >调试 - >调试模式并更改" gdbserver"的值到" gdb"

答案 3 :(得分:-3)

如果您使用V BAT作为备用电源且备用电压驱动器低于1.65V,则在连接电源后会出现同样的问题。

在这种情况下,您必须断开所有电源并重新连接正确的电压。然后调试问题就消失了。