c++ - 您如何正确使用 gdb `set substitution-path` 和 ../ 开头的引用?
问题描述
我正在对核心文件进行事后调试。构建完成后,源代码的位置在核心中被引用为 ../../../../../_vcs。我将源代码放在 /_vcs 中(即在根目录下)。但是,我无法让set substitute-path
gdb 命令工作。这应该如何调用?
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
正确显示了源代码。
推荐阅读
- android - 同一EditText中的不同键盘 - Android
- c# - 调用 Ebay API 时,Content-Language 标头会引发 Misused header name 错误
- java - RxJava:令人费解的行为
- amazon-web-services - 增加和减少 AWS CloudWatch 图表
- java - Junit Mockito 将 SessionFactory 模拟成 DAO 测试类
- r - 你如何在给定的单词列表中找到两个不同的字符(比如 N 和 Z)
- python - “ValueError:所有输入数组必须具有相同的维数”sklearn 管道中的错误
- mysql - 初始化部署在 AWS EKS 中的 MySQL 数据库
- python - 即使存在 pip 包,如何重新安装它
- json - 在这种情况下,“D”对于类型查找不明确