在gdb程序的时候,有时候会发现源代码文件找不到
这个时候有两种选择:
如果gdb这个时候告诉你找不到这个带调试信息库的源文件路径,此时给出的路径地址是绝对路径,比如
/home/xxx/dev/aaa/bbb/ccc.c
: 没有那个文件或目录
这种提示的,你就应该用gdb提供的
set substitute-path
这个其实很好理解,就是替换规则,你如果想查看当前的替换规则,你可以
show substitute-path
比如此时我们需要ccc.c这个文件,但由于某种原因,目前我们不能在/home/xxx/dev/aaa/bbb/ccc.c
中找到,
但我们确可以在/data/bbb/ccc.c中找到,我们就
set substitute-path /home/xxx/dev/aaa/bbb/ /data/bbb/
此时我们再show substitute-path可以看到此时的转换规则已经被我们加进去了
./a.cpp 没有那个文件或目录 那么此时你可以用dir dirName来指定,也就是说如果我们此时的a.cpp不在当前目录下,而是在当前目录下的bak文件夹下,我们只要
dir bak
这个时候我们的gdb就会把你加进去的dir整个替换到相对路径的前面,自己做拼接,也就是说,现在的./a.cpp变成了./bak/a.cpp。
注意两者的差别,对于绝对路径来说,你需要给出替换规则给他做字符串替换,对于相对路径来说,你需要给他目录来让他做拼接,也有点prefix的意思,这里的prefix由你给出,但相对路径整体结构由gdb给出,然后完成拼接操作。