如何为相对路径

时间:2016-05-19 17:53:21

标签: gdb

我将gdb附加到进程并且只是在函数断点处停止。 不幸的是,由于映射似乎已关闭,我无法看到任何源代码。

它查找报告的文件为:../../qpy/QtCore/qpycore_chimera.cpp,下载的源位于/home/user/debugging/pyqt5-5.4.2+dfsg/qpy/QtCore

无论我设置为源映射,它都不会打开文件。相对源映射的正确语法是什么?

1 个答案:

答案 0 :(得分:0)

如果您不想为所有文件运行directory gdb命令,那么我有一个适用于我的黑客。

如果源路径为../../qpy/QtCore/qpycore_chimera.cpp,并且您已将源移至/home/user/debugging/pyqt5-5.4.2+dfsg/qpy/QtCore

然后尝试创建一些虚拟目录层次结构$ mkdir -p /home/user/debugging/dir_1/dir_2并在gdb中运行directory /home/user/debugging/dir_1/dir_2

在gdb中,/home/user/debugging/dir_1/dir_2/../../qpy/QtCore/qpycore_chimera.cpp串联在一起的方式就是/home/user/qpy/QtCore/qpycore_chimera.cpp,这就是您想要的。

在其他更复杂的情况下,我确信符号链接会有所帮助(对于我的情况也是如此)。

参考: https://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html

  

例如,假设一个可执行文件引用了该文件   /usr/src/foo-1.0/lib/foo.c,我们的源路径是/ mnt / cross。的   首先从字面上查找文件;如果失败   尝试/mnt/cross/usr/src/foo-1.0/lib/foo.c;如果失败   /mnt/cross/foo.c已打开;如果失败,则显示错误消息   印刷。 GDB不会查找源文件名的一部分,例如   作为/mnt/cross/src/foo-1.0/lib/foo.c。同样,的子目录   不搜索源路径:如果源路径是/ mnt / cross,   并且二进制文件指向foo.c,GDB在以下位置找不到它   /mnt/cross/usr/src/foo-1.0/lib。

     

普通文件名,带有前导目录的相对文件名,文件   包含点等的名称均按上述方式处理;对于   例如,如果源路径为/ mnt / cross,并且源文件为   记录为../lib/foo.c,GDB将首先尝试../lib/foo.c,然后   /mnt/cross/../lib/foo.c,然后-/ mnt / cross / foo.c。