首页 > 代码库 > GDB源代码查找路径

GDB源代码查找路径

在gdb程序的时候,有时候会发现源代码文件找不到,对于那些带调试信息的系统库或者第三方库,很多时候当你真正想gdb去追他源代码的时候你会发现gdb根本找不到这些源代码路径。这个时候有两种选择:

【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

这是什么意思?其实就是让gdb在看到/home/rickyk/qt-4.8.6的时候他会做自动替换成/home/rickyk/qt-everywhere-opensource-src.4.8.6,也就是说gdb可以正确知道这个文件了。此时我们再show substitute-path可以看到此时的转换规则已经被我们加进去了

(gdb) show substitute-path List of all source path substitution rules:  `/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给出,然后完成拼接操作。

GDB源代码查找路径