9

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

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

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

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

4

1 回答 1

4

我发现了这一点:在使用分层生成文件构建项目时会发生问题。如果从父目录(在我的 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 打开源文件!

顺便说一句:替换make -w -C sub-dir(cd sub-dir;make -w)是另一种解决方法。

于 2012-08-29T06:19:46.333 回答