2012-03-21 213 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」

相關問題