当使用 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 打开源文件!
顺便说一句:将 make -w -C sub-dir
替换为 (cd sub-dir;make -w)
是另一种解决方法。
关于c++ - gdb 找不到由 clang++ 编译的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579747/