你如何正确使用 gdb "设置替代路径",并在开头使用 ./ 引用?



我正在对核心文件进行事后调试。构建是这样完成的,源代码的位置被引用为 ../../../../../_vcs在核心中。我将源代码放在/_vcs 中(即根目录)。但是,我无法使set substitute-pathgdb命令工作。应该如何调用它?

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc.
...
Program terminated with signal 6, Aborted.
#0  0x00007f9f6fd37207 in raise () from /lib64/libc.so.6
(gdb) f 2
#2  0x000000000042c585 in SignalHandler (sig=11) at ../../../../../_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc:935
935     ../../../../../_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc: No such file or directory.
(gdb) set substitute-path ../../../../../ /
(gdb) l
930     ../../../../../_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc: No such file or directory.
(gdb) set substitute-path ../../../../../_vcs /_vcs
(gdb) l
930     ../../../../../_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc: No such file or directory.
(gdb) quit
-bash-4.2$ ls /_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc
/_vcs/trafficserver9/src/traffic_manager/traffic_manager.cc

请注意,在我手动将../../../../../_vcs替换为/_vcs后,我可以在指定位置列出文件。我做错了什么?我必须逃离部分路径吗?

(作为旁注,我可以通过cd /解决此问题。然后间接../引用停止在/处,我可以访问该目录。但在我看来,set substitute-path也应该解决这个问题。

也许这不是在所有情况下都有效的解决方法,但我碰巧在源代码树中有一个目录,该目录与原始二进制文件编译的目录一样深。 (如果我没有这样的目录,我可以做一个。 因此,我使用gdb命令cd编译路径../../foo/bar/file.cpp实际可以找到代码的位置。

此时,gdb 命令list正确显示源。

最新更新