gdb没有找到clang ++编译的源文件

时间:2012-07-20 12:50:34

标签: c++ macos gdb clang waf

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

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

此功能在Snow Leopard上使用了clang ++ 2.9,但在Lion上不适用于clang ++ 3.1。我有XCode 4.3.2。

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

1 个答案:

答案 0 :(得分:4)

我发现了这个问题:在使用分层makefile构建项目时会出现问题。如果从父目录(在我的makefile中make -w -C sub-dir)构建了一个子目录,那么gdb无法打开源文件。当转换到sub-dir并为此目录调用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:将make -w -C sub-dir替换为(cd sub-dir;make -w)是另一种解决方法。