Xcode 3.2 + LLVM = 调试时没有本地符号

10

我有一个针对 Mac OS X 10.5 的项目,我正在使用 Xcode 3.2 在 10.6 上构建它。当我使用 GCC 4.2 进行 Debug 构建并触发断点时,Xcode 调试器会正常显示本地变量信息。但如果我选择 LLVM GCC 4.2 或 Clang LLVM,则在触发断点时,本地符号将不可用,并且如果我尝试打印 self 或任何其他本地符号,GDB 将显示 No symbol 'self' in current context。在所有情况下,Generate debug info 选项都已设置。Debug 配置设置为 $(NATIVE_ARCH) 和 10.5 SDK,同时设置了 Build active architecture only 选项。当 GDB 启动时,我可以看到它被配置为 x86_64-apple-darwin。我肯定是错过了一些显而易见的东西。我该如何使使用 LLVM 编译器时 GDB 显示本地符号呢?

5个回答

10

对于那些不熟悉的人,以下是一些更详细的内容,这些内容来自于 cdespinosa 的答案。对我非常有效,所以我投了赞成票。

  1. 从 Xcode 菜单中选择 项目 > 编辑项目设置...
  2. 选择“构建”选项卡
  3. 在搜索框中输入“优化级别”,选择该字段,并选择“无”。
  4. 接下来搜索“调试信息格式”,选择该字段并选择“DWARF”或“DWARF with dSYM”。

如果我有权限,我会把这些放到评论里面的。 ;)

这让我浪费了很多时间,而且实际上苹果也有点草率,但总的来说我没有什么可抱怨的。


6

请确保您在不进行优化的情况下使用Dwarf符号进行构建。LLVM是一个新的后端,它的部分优化代码生成尚未与调试符号生成连接起来。


5
这可能会有所帮助。尝试在项目的构建选项中关闭"链接时间优化"。这解决了我遇到的缺失调试符号问题。
实际上,这解决了我使用Clang时遇到的一系列奇怪问题。我认为这个功能还太过前沿,不应该使用。

1
我曾经遇到过这个问题,通过在菜单项“项目 > 设置活动构建配置 > 调试”旁边打勾解决了它。之前选择的是“发布”选项。从那时起,我的项目中的本地变量开始在调试器中显示出来。

1

自由软件基金会的GDB最近才添加了对JIT代码的支持。

我不知道苹果提供的GDB是否完全支持它(你能得到合理的堆栈跟踪吗?)。如果是这样,这种支持显然是不完整的。


你为什么认为这与JIT有关,或者苹果会发布一个与他们编写的编译器不完全兼容的gdb呢? - user57368
堆栈看起来正确,显示了所有的函数。缺失的是本地变量。 - glebd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接