GDB指定和修改搜素原始碼檔案的路徑(set substitute-path)
阿新 • • 發佈:2022-03-15
今天用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之類的,它喜歡使用絕對路徑,有人可以寫個指令碼讓它使用相對路徑,參考之後,即使你的原始檔1.cpp 放在 /home/bbb下面也是可以找到的了。因為gdb幫你做了字串替換。