2012-07-25 27 views
2

我具有類似於下面的一個一些問題,一個C++代碼段:如何確定在沒有調試符號的情況下從外部庫引發什麼異常?

try { 

     /* some code here */ 

} catch(...) { 

     /* ... */ 
} 

我通過包含在與GDB try塊和在一些點東西代碼步進被拋出。我無法真正知道它是什麼,因爲拋出的函數調用來自庫並且沒有與之關聯的調試符號。

gdb是否有辦法確定在catch塊中被捕獲的是什麼?

+0

您是否嘗試過在catch語句中打印異常?也許這會讓你更清楚地瞭解異常來自哪裏(即使不使用gdb) – 2012-07-25 14:36:03

+0

如果庫沒有記錄它的公共API(包括它拋出的),你應該*強烈*考慮做出不同的庫選擇。 – 2012-07-25 14:58:14

回答

1

您可以嘗試call current_exception(),如果您的平臺支持,將返回exception_ptr作爲當前異常。然而,它並沒有詳細說明exception_ptr中包含的內容,但是您可以用x來檢查它,看看能否找出一些東西。

也有可能是某個寄存器包含當前異常數據,但是您沒有指定您正在使用的架構。

相關問題