我有一个带有单个Scheme的Xcode项目,除了在Debug配置中启动OS X应用程序之外别无其他。该应用程序不是由项目构建的,项目没有任何目标。 Xcode项目只是从Scheme启动应用程序。该应用程序最初是通过外部命令行构建脚本在调试模式下构建的,除主要可执行文件外还包含许多动态库(dylib)。
通过Xcode以这种方式启动应用程序后,如果应用程序被断言语句停止(或者只是手动暂停),则生成的调用堆栈只会显示地址指针。没有显示符号:
但是,如果我强制断言继续,应用程序崩溃并生成完全符号化的崩溃报告,尽管应用程序发行版中的任何地方都没有dSYM文件。
[编辑]:此外,许多符号出现在调试器源代码编辑器的顶部,在堆栈中的许多(但可能不是全部)调用中显示:
rendersystemtest`CMaterialSystem2AppSystemDict::SetupMaterialSystem:
rendersystemtest[0x1cfb99] <+1753>: movb $0x1, -0x51(%rbp)
rendersystemtest[0x1cfb9d] <+1757>: movq 0x85c4e4(%rip), %rax ; (void *)0x0000000000000000
rendersystemtest[0x1cfba4] <+1764>: movb -0x51(%rbp), %cl
rendersystemtest[0x1cfba7] <+1767>: movq (%rax), %rax
rendersystemtest[0x1cfbaa] <+1770>: cmpq -0x8(%rbp), %rax
rendersystemtest[0x1cfbae] <+1774>: movb %cl, -0x101(%rbp)
因此,符号存在于某个地方,它们只是没有在UI调用堆栈中显示。
此外,缺少调用堆栈符号是最近的结果。以前,相同的可执行文件在断言暂停或停止时显示符号化的调用堆栈:
我的问题是:
[编辑2016-11-05] 经过进一步研究,这似乎是环境......可能与macOS Sierra的更新有关。运行El Capitan的类似MacBook上不会出现此问题。
但仍然不知道根本原因是什么。任何意见都将不胜感激。