【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给出,然后完成拼接操作。
网友评论