GDB指定和修改搜素源碼文件的路徑(set substitute-path)


今天用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幫你做了字符串替換。

 

相關的參考來自 

http://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html

 

gdb t_video_format_insert -c /data/coredump/backup/core_t_video_format_  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM