GDB為什麼檢視不了原始碼?

__Chen_Sheng__發表於2020-12-25

GDB為什麼檢視不了原始碼?說No symbol “xxx” in current context?

可能有以下原因:

  • 原因一:可能GCC版本跟GDB版本相差太大,以至於GCC產生的DWARF4格式的debug檔案,GDB無法解析.
  • 解決方法:
檢視GCC和GDB版本號:
- gcc --version
- gdb --version
- 相容版本號:GCC = 4.8.x,  GDB = 7.6.x,可以讓GDB檢視到GCC生成的相應的dwarf格式的檔案。
  • 原因二:GCC編譯的時候並沒有加上"-g"或者"-g3"引數,所以並沒有把原始碼編譯進可執行程式裡。

  • 解決方法:在編譯去時候加上-g或者-g3(g3引數比g引數,能檢視更多的資訊)

  • 原因三:make clean的時候,並沒有真正把object檔案和executable可執行檔案全部刪除,還是使用原來的可執行程式,所以要確保真的刪除了。

一些小提示:

  • 如果打斷點的時候,會給出具體的檔案資訊,那麼原始碼是被編譯進可執行程式的,是可以在執行時檢視的。
    例如:
(gdb) b main
Breakpoint 1 at 0x4510d3: file ./src/main.cpp, line 118.
  • 以上例子,在main函式入口處打一個Breakpoint,可以看到斷點所在的具體檔案且所在行,說明原始碼已經被編譯進可執行程式了。

相關文章