GDB為什麼檢視不了原始碼?
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,可以看到斷點所在的具體檔案且所在行,說明原始碼已經被編譯進可執行程式了。
相關文章
- gdb 檢視 jsoncpp物件JSON物件
- 帝國cms原始碼怎麼檢視原始碼
- 為什麼要閱讀原始碼原始碼
- fiddler 抓手機包出現這種情況為什麼檢視不了請求資料
- 為什麼大部分碼農做不了架構師?架構
- petite-vue原始碼剖析-為什麼要讀原始碼?Vue原始碼
- 為什麼要閱讀核心原始碼?原始碼
- GDB檢視記憶體(x 命令)記憶體
- 為什麼你總成為不了架構師?架構
- centos 檢視命令原始碼CentOS原始碼
- 如何才能檢視原始碼原始碼
- MySql 什麼是檢視MySql
- 為什麼你成為不了團隊核心成員
- gdb golang 檢視iface 內部結構Golang
- 用GDB檢視記憶體內容記憶體
- Golang之微服務為什麼發現不了Golang微服務
- 如何檢視python原始碼Python原始碼
- Maven2檢視原始碼Maven原始碼
- 為什麼我不贊成開發來寫檢視
- 為什麼前端模型-檢視-控制器MVC會死?前端模型MVC
- 檢視v$sql_shared_cursor檢視獲取sql語句為什麼不能共享?SQL
- 為什麼建議你常閱讀原始碼?原始碼
- 為什麼我們需要更注重原始碼安全?原始碼
- 我們為什麼要閱讀webpack原始碼Web原始碼
- http狀態碼是什麼,有什麼用,在哪裡檢視,分別代表什麼意思?HTTP
- 使用 gdb 檢視 coredump 檔案的 backtrace
- <摘錄>CentOS怎麼檢視某個命令的原始碼CentOS原始碼
- 網頁原始碼保護(禁止右鍵、複製、另存為、檢視原始檔)網頁原始碼
- django rest framework 檢視原始碼解析DjangoRESTFramework原始碼
- drf 檢視使用及原始碼分析原始碼
- struts2 如何檢視原始碼原始碼
- Eclipse 如何檢視jdk原始碼EclipseJDK原始碼
- 完美獲得SAS檢視原始碼原始碼
- 作為程式設計師為什麼要閱讀原始碼程式設計師原始碼
- 從原始碼安裝GDB-8.1原始碼
- 為什麼在Docker裡使用gdb偵錯程式會報錯Docker
- 什麼是資料庫檢視?資料庫
- PHP 原始碼探祕 – 為什麼 trim 會導致亂碼PHP原始碼