使用clang ++编译项目时,源文件的路径显然不包含在目标代码中。这意味着gdb无法找到显示代码的源文件。对于特定的实例,我可以使用gdb的directory
命令添加目录,但我的项目有很多源目录,这很快就会烦人。
当我将配置切换为使用g ++时,gdb只会找到我的所有源文件。
此功能在Snow Leopard上使用了clang ++ 2.9,但在Lion上不适用于clang ++ 3.1。我有XCode 4.3.2。
是否有clang选项强制在目标文件中使用完整路径?我的配置可能还有其他问题吗?
答案 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)
是另一种解决方法。