【1】如果gdb這個時候告訴你找不到這個帶調試信息庫的源文件路徑,此時給出的路徑地址是絕對路徑,比如
/home/rickyk/qt-4.8.6/src/corelib/tools/qstring.cpp
: 沒有那個文件或目錄
這種提示的,你就應該用gdb提供的
set substitute-path
這個其實很好理解,就是替換規則,你如果想查看當前的替換規則,你可以
show substitute-path
比如此時我們需要qstring.cpp
這個文件,但由于某種原因,目前我們不能在/home/rickyk/qt-4.8.6/src/corelib/tools/qstring.cpp
中找到,但我們確可以在/home/rickyk/qt-everywhere-opensource-src-4.8.6/src/corelib/tools/qstring.cpp
中找到,我們就
set substitute-path /home/rickyk/qt-4.8.6 /home/rickyk/qt-everywhere-opensource-src-4.8.6
【2】如果此時的gdb彈出的錯誤信息不是絕對路徑的概念,而是相對路徑的概念
./a.cpp
沒有那個文件或目錄
那么此時你可以用gdb的第二個源代碼路徑法寶----directory(dir) dirName
來指定,也就是說如果我們此時的a.cpp
不在當前目錄下,而是在當前目錄下的bak文件夾下,我們只要
dir bak
這個時候我們的gdb就會把你加進去的dir整個替換到相對路徑的前面,自己做拼接,也就是說,現在的./a.cpp
變成了./bak/a.cpp
。
注意兩者的差別, 對于絕對路徑來說,你需要給出替換規則給他做字符串替換,對于相對路徑來說,你需要給他目錄來讓他做拼接, 也有點prefix的意思,這里的prefix由你給出,但相對路徑整體結構由gdb給出,然后完成拼接操作。