我正在尝试调试使用Ninja编译的应用程序。
-
我有我的源代码
/usr/local/...project-src/
-
我的构建输出位于
/usr/local/...project-src/out/Debug/build
-
编译后的输出包含调试信息
-
file out/Debug/build
包括:ELF 64-bit LSB shared object,x86-64,version 1 (SYSV),dynamically linked,interpreter /lib64/ld-linux-x86-64.so.2,for GNU/Linux 3.2.0,with debug_info,not stripped
-
-
使用相对路径时,我可以添加断点:
cd /usr/local/...project-src gdb file out/Debug/build b x/y.cc:34 # success Breakpoint 1 at <mem-loc>: file ../../x/y.cc,line 34.
-
但是当我使用绝对路径时,它会失败
cd /usr/local/...project-src gdb file out/Debug/build b /usr/local/...project-src/x/y.cc # failure No source file named /usr/local/...project/x/y.cc.
-
info source
打印No current source file.
-
dir
打印Source directories searched: /usr/local/...project-src/out/Debug:$cdir:$cwd
我也尝试过:
-
b ../../x/y.cc
,我尝试了此操作,因为这是成功命令输出的内容。令人惊讶的是,它没有用,这确实让我感到困惑。 - 从根目录和其他目录运行gdb。
- 启动gdb后,对各个目录执行
cd
- 与
set substitute-path
聊天,并使用dir
添加目录
我希望解决方案很简单,因为断点和变量值以及其他所有方法都可以工作,只是不能使用绝对路径。
另外值得注意的是,一旦我成功地向文件添加了一个断点(使用相对路径),其他路径也就可以了(绝对路径和../../x/y.cc
路径)。
最后,关于我为什么要使用绝对路径的原因,我正在使用CLion的remote-gdb配置连接到gdbserver,而CLion出于任何原因都在使用绝对路径。也许有一种方法可以将CLion配置为仅使用x/y.cc
?我正在使用gdbserver :2000 out/Debug/build
运行gdbserver并配置了CLion的目标远程,符号文件和sysroot。我也尝试过在CLion中设置路径映射。
编辑,使用g++ -g
而不是ninja
在虚拟HelloWorld项目上进行测试,我可以使用绝对路径添加断点,例如b /usr/local/...untitled/main.cpp:4
。出于某种原因,gdb
似乎支持使用g ++构建的HelloWorld项目的完整路径,但不支持使用Ninja构建的真实项目的完整路径。