c++ - gdb 找不到由 clang++ 编译的源文件

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

最佳答案

我发现了这一点:问题发生在使用分层 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/

相关文章:

c++ - 是否可以捕获 lambda 类型的异常?

ios - 在 Swift 中保存 CoreData 对多关系

c++ - 字节数组赋值

c++ - 哪个先出现? header 守卫、命名空间和包含

MAC 上的 MySQL 安装

python - 如何在 Windows 上调试 Python 的 C 扩展

c++ - GDB 错误 "cp_search_static_and_baseclasses"

c++ - 在调试器外编程正常,单步执行时在调试器下 SIGILL?

c++ - 通过 require 在不同的 Lua 状态之间共享全局变量

swift - 如何在 osx 上使用 swift 创建一个具有透明背景的窗口?