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

rob*_*ert 8 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选项强制在目标文件中使用完整路径?我的配置可能还有其他问题吗?

Ren*_*ene 4

我发现了这一点:当使用分层 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 
Run Code Online (Sandbox Code Playgroud)

欢呼!gdb 打开源文件!

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