2017-09-11 116 views
0

我的應用程序因未捕獲的異常而崩潰(我的C++代碼在某些情況下拋出未捕獲的異常)。我正在嘗試gdb核心文件。二進制庫是「不帶條紋」的。堆棧跟蹤顯示從中捕獲未捕獲的異常的函數(我的代碼),但是當我嘗試打印函數參數時,我總是得到「在當前上下文中沒有符號xxx」。信息參數也返回「沒有符號表信息可用」。gdb corefile看不到函數參數

任何人都可以解釋爲什麼?這是由於解開/破壞堆棧的未捕獲異常?

感謝, 弗蘭克

+0

coredump不一定會包含所有的符號。這可能是因爲缺少庫或非調試構建的庫,甚至是編譯器優化。 – Griffin

+0

另外,您應該在詢問新問題之前嘗試冷藏[搜索堆棧溢出](https://stackoverflow.com/search?q=gdb+No+symbol+table+info+available)。 – Griffin

回答

1

您的二進制文件沒有調試信息。

如果用gcc建立了它,並希望調試core你已經有了(如果如很難重現崩潰),您可能能夠通過與正好的重建二進制從此恢復相同的源代碼和命令行,添加-g來編譯和鏈接命令。 (注:你必須使用相同的編譯線;更換-O2-g不會做。)

如果崩潰並不難複製,簡單地-g -O0重建二進制文件,運行它GDB下,並享受「簡單」的調試。

二進制庫是「不帶條紋」。

這並不意味着你的想法。不剝離意味着符號表仍然存在於二進制文件中。

GDB將讀取此符號表,並使用它來將地址範圍映射到函數名稱。

但復甦的名稱和局部變量和參數的值,你必須編譯與調試信息(這是什麼-g標誌確實爲大多數編譯器)。

+0

優化標誌是否應該降低? – dlmeetei

+0

@dlmeetei如果你想分析已經存在的'core'文件,則不行。 –

+0

但是我們要求重新編譯 – dlmeetei