gdb源代碼文件目錄修改


今天用gdb查看core文件,發現找不到源文件。記錄一下相關命令
在gdb裏面查看源碼,
list 一下提醒找不到相關文件,列出來的是絕對路徑的完整文件名。
help files   看一下幫助,可以加載符號,源文件等,自己看一下。
dir 設置源碼路徑無效,show directories  看到設置成功,但是還是找不到文件。
應該是絕對路徑的問題。
因爲igcc 根據你編譯的時候指定的是絕對路徑還是  ../../XXX.cpp之類的相對路徑,在生成debug_info的時候,也把這個路徑保存爲debug_info 裏面的文件名字,就是最後 gdb list 裏面找到的文件名字。
這個可以list  查看是不是絕對路徑,然後可以用命令
 readelf -p .debug_str  exe_or_so_file 
看到裏面保存是是完整的絕對路徑。
gdb 的dir 命令添加的源碼搜索路徑只對相對路徑的情況有效。
一個解決辦法就是在gcc的時候,使用相對路徑那麼gdb裏面你就可以使用 dir來設置了。像些CMake之類的,它喜歡使用絕對路徑,有人可以寫個腳本讓它使用相對路徑,參考 http://stackoverflow.com/questions/9607155/make-gcc-put-relative-filenames-in-debug-information
如果gcc裏面-g  生成的debug_info 使用的絕對路徑了,最簡單的辦法就是你把源碼也放到相應的位置上去了。
但如果你不想使用這個絕對路徑,那也還是有辦法的。 
GDB還提供另外一個選擇,可以讓你修改源碼搜索路徑,把源碼絕對路徑裏面的一個path映射到另一個path上去,這樣即使你debug info了裏面的是絕對路徑,源碼也可以放到另外的目錄。
這就是命令
set substitute-path from_path  to_path
比如 list顯示的源碼是   /home/aaa/1.cpp
那麼設置了 set substitute-path /home/aaa/   /home/bbb/

之後,即使你的源文件1.cpp 放在 /home/bbb下面也是可以找到的了。因爲gdb幫你做了字符串替換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章