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

我正在调试一个(嵌入式)软件。 我在一个函数上设置了一个断点,由于某种原因,一旦我到达那个断点并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 – > Configuration properties – > Debugging – > Debugging mode并将值从“gdbserver”更改为“gdb”

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

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