我试图将我对“ DWARF”和“带有DSYM文件的DWARF”调试信息格式的理解映射到我在不同iOS构建配置的崩溃信息中看到的内容。
我正在尝试解决一个问题,该问题默认情况下不带有调试配置的构建崩溃标志。这些是问题解决之前的我的构建设置-
带状链接产品-调试-否,发布-是
复制过程中的条形调试符号-调试-否,发布-是
调试信息格式-调试-DWARF,发行版-带有dSYM文件的DWARF
工作原理是将调试信息格式也设置为“带有dSYM文件的DWARF”以进行调试配置。
我的问题是-如果我指定不应将产品的符号剥离到dSYM文件中(在剥离链接产品设置中),为什么我需要将格式设置为“带有dSYM文件的DWARF”?
我的理解(可能是错误的)是,如果将其设置为DWARF,则所有调试信息都将位于应用程序二进制文件中,并且不需要单独的dSym文件来进行符号化吗?请帮助我更好地理解这一点。
答案 0 :(得分:1)
在Apple平台上,DWARF永远不会烘焙到可执行文件中(展开信息除外)。启用DWARF调试信息仅表示.o文件包含DWARF格式的调试信息。不过,链接器不会将其带入可执行文件中。
如果您请求dSYM文件,则单独的构建步骤将使用dsymutil
将.o文件中的调试信息收集到dSYM捆绑包或文件中。
调试器可以在需要时使用可执行文件中的映射来查找.o文件中的调试信息,前提是您要在构建计算机上进行调试。这就是为什么在调试版本中通常不需要dSYM文件的原因。符号化没有可执行文件,只有可执行文件的UUID。它可以使用UUID找到dSYM,但没有找到.o文件的信息。
请参阅参与实现此操作的Apple开发人员的this answer。另外,this older wiki article他写道。