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

时间:2009-09-03 00:59:42

标签: xcode debugging gdb llvm clang

我有一个Mac OS X 10.5的项目,我使用Xcode 3.2在10.6上构建。当我使用GCC 4.2进行Debug构建并命中断点时,Xcode调试器通常会显示局部变量信息。如果我选择LLVM GCC 4.2或Clang LLVM,当我点击断点时,本地符号不可用,并且如果我尝试打印 self ,GDB会说在当前上下文中没有符号'self' strong>或任何其他本地符号。在所有情况下都设置生成调试信息选项。 Debug配置设置为$(NATIVE_ARCH),并且设置了10.5 SDK,仅构建活动体系结构选项。当GDB启动时,我可以看到它被配置为x86_64-apple-darwin。我一定错过了一些明显的东西。在使用LLVM编译器时,如何使GDB显示本地符号?

5 个答案:

答案 0 :(得分:10)

对于那些不熟悉的人,cdespinosa的回答更加详细,这对我有用,并且我投票了。

  1. 从Xcode菜单中选择Project>编辑项目设置...
  2. 选择“构建”标签
  3. 在搜索框中输入“优化级别”,选择该字段,然后选择无。
  4. 接下来搜索“调试信息格式”,选择该字段,然后选择“DWARF”或“DWARF with dSYM”。
  5. 如果我有权利,他会在评论中写这篇文章。 ;)

    这花费了我一些严肃的时间,坦白说苹果公司有点草率,但总的来说我不能抱怨。

答案 1 :(得分:6)

确保使用Dwarf符号构建并且不进行优化。 llvm是一个新的后端,并不是它的所有优化代码都连接到调试符号生成。

答案 2 :(得分:5)

这可能会有所帮助。尝试在项目的构建选项中关闭“链接时优化”。这解决了我丢失调试符号时遇到的问题。

事实上,这解决了我与Clang的一系列奇怪问题。我会说这个功能太过于使用了。

答案 3 :(得分:1)

来自FSF的GDB仅添加了对JIT代码的支持recently

我不知道Apple提供的GDB是否完全支持它(你有合理的堆栈跟踪吗?)。如果确实如此,这种支持(显然)是不完整的。

答案 4 :(得分:1)

我遇到了这个问题并通过在菜单项旁边打勾来解决它:“Project> Set Active Build Configuration> Debug”。以前,选择了“发布”选项。从那时起,本地人开始在我的项目的调试器中显示。