我将 gdb 附加到一个进程,并在函数断点处停止。不幸的是,我看不到任何源代码,因为映射似乎已关闭。
它查找的文件报告为:../../qpy/QtCore/qpycore_chimera.cpp下载的源位于/home/user/debugging/pyqt5-5.4.2+dfsg/qpy/QtCore.
无论我将源映射设置为什么,它都不会打开该文件。相对源映射的正确语法是什么?
如果您不想运行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并运行directory /home/user/debugging/dir_1/dir_2在 gdb 中运行。
在 gdb 中以这种方式/home/user/debugging/dir_1/dir_2/连接../../qpy/QtCore/qpycore_chimera.cppis/home/user/qpy/QtCore/qpycore_chimera.cpp连接起来就是你想要的。
在其他更复杂的情况下,我确信符号链接会有帮助(对于我的情况也是如此)。
\n\n参考:\n https://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html
\n\n\n\n例如,假设一个可执行文件引用文件\n /usr/src/foo-1.0/lib/foo.c,而我们的源路径是/mnt/cross。首先按字面查找\n 文件;如果失败,\n /mnt/cross/usr/src/foo-1.0/lib/foo.c 会被尝试;如果失败,\n /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.
\n\n普通文件名、带前导目录的相对文件名、包含点的文件名等均按上述处理;例如,如果源路径是/mnt/cross,并且源文件记录为../lib/foo.c,GDB将首先尝试../lib/foo.c,然后\n / mnt/cross/../lib/foo.c,然后是\xe2\x80\x94/mnt/cross/foo.c。
\n