2012-03-21 208 views
13

我正在调试一块(嵌入式)软件。我为一个函数设置了一个断点,出于某种原因,一旦我到达了这个断点并且我总是回到函数(这是一个只能被调用一次的初始化函数)。当我删除了断点,continue,GDB告诉我:程序接收到的信号SIGTRAP,跟踪/断点陷阱

Program received signal SIGTRAP, Trace/breakpoint trap.

因为我用的断点工作,我假设我在“断点陷阱”下跌。什么是断点陷阱?

+0

添加了更详细的标题。它会帮助其他用户 – 2012-03-21 17:09:18

+0

这也是您可以在[electronics SE](http://electronics.stackexchange.com)上发布的问题类型。 – Kortuk 2012-03-21 17:53:14

+1

@Kortuk这个GDB Qn与电子产品有什么关系? :-o – 2012-03-21 18:17:56

回答

8

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

+0

如果CPU重置,GDB是否仍然活着并且附加到用户的可执行文件? – 2012-03-21 18:19:15

+1

@PavanManjunath,是的,它可以重置CPU,然后在不干扰GDB会话的情况下点击断点。 – TJD 2012-03-21 19:16:45

-3

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

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

+2

这完全取决于所使用的微控制器/微处理器。 – Dean 2013-03-16 14:07:24

6

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

贵国的进程正在运行多个线程

例如 - 2说x & y。

2. 线程y命中断点但您有附加gdb到线程x。

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

+1

使用分叉测试用例的单元测试框架时,这是一个常见症状。很高兴知道! – 2015-08-19 09:57:15

1

我得到了这个问题,在Visual Studio 2015中运行linux项目并远程调试。我的解决方案是project_properties - >配置属性 - >调试 - >调试模式并将值从“gdbserver”更改为“gdb”

相关问题