gdb 找不到由 clang++ 编译的源文件

gdb doesn't find source files compiled by clang++

本文关键字:源文件 编译 clang++ 找不到 gdb      更新时间:2023-10-16

使用clang++编译项目时,目标代码中显然不包括源文件的路径。这意味着gdb无法找到用于显示代码的源文件。对于特定的实例,我可以使用gdb的directory命令来添加目录,但我的项目有很多源目录,这很快就会变得很烦人。

当我将配置切换为使用g++时,gdb只需找到我的所有源文件。

该功能在Snow Leopard上运行了clang++2.9,但在Lion上不运行clang++3.1。我有XCode 4.3.2。

是否有强制在对象文件中使用完整路径的clang选项?我的配置可能有其他问题吗?

我发现了这一点:当使用分层makefile构建项目时,就会出现问题。如果子目录是从父目录(在我的makefile:make -w -C sub-dir中)构建的,那么gdb无法打开源文件。当更改到子目录并仅为此目录调用make时,gdb会找到源。您可以通过在生成的对象文件中搜索生成路径来验证这一点。我使用了strings object-file | grep $HOME

我还注意到:一个对象文件没有发生这种情况:这个文件没有用CC编译。这个文件是用esql编译的。最后,esql调用CC.

这就是我尝试这种变通方法的原因:不要直接从make调用clang。从shell脚本调用clang。

$ cat ~/bin/mycc
/usr/bin/cc "$@"
$ export CC=mycc
$ make 

万岁!gdb打开源文件!

BTW:用(cd sub-dir;make -w)替换make -w -C sub-dir是另一种解决方法。