Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';DWARF和使用dSYM文件的DWARF之间的区别是什么?_Ios_Xcode - Fatal编程技术网

Ios 什么';DWARF和使用dSYM文件的DWARF之间的区别是什么?

Ios 什么';DWARF和使用dSYM文件的DWARF之间的区别是什么?,ios,xcode,Ios,Xcode,XCode支持此生成设置的以下2个值: 生成设置>生成选项>调试信息格式 有人能解释一下区别吗?区别在于,在DWARF with dSYM文件的情况下,您的存档app.xArchive(用于临时分发)还包含在崩溃报告中反向符号化代码所需的dSYM文件。通常,.xcsarchive包含 dSyms Products info.plist 因此,如果您需要在存档应用程序下对崩溃报告进行外部分析以进行分发,您应该使用DWARF with dSYM file。一如既往地理解缩写帮助 是一种广泛使用的标

XCode支持此生成设置的以下2个值:

生成设置>生成选项>调试信息格式


有人能解释一下区别吗?

区别在于,在DWARF with dSYM文件的情况下,您的存档app.xArchive(用于临时分发)还包含在崩溃报告中反向符号化代码所需的dSYM文件。通常,.xcsarchive包含

dSyms
Products
info.plist

因此,如果您需要在存档应用程序下对崩溃报告进行外部分析以进行分发,您应该使用DWARF with dSYM file。

一如既往地理解缩写帮助

是一种广泛使用的标准化调试数据格式:

DWARF最初是与(ELF)一起设计的,尽管它独立于对象文件格式。这个名字是对“ELF”的中世纪幻想补充,没有正式意义。只是矮人和精灵都是神话中的生物

(dSYM):

默认情况下,应用程序的调试版本将调试符号存储在已编译的二进制文件中,而应用程序的发布版本将调试符号存储在附带的dSYM文件中,以减小二进制文件的大小

调试符号文件和应用程序二进制文件在每个构建的基础上由构建UUID绑定在一起。为应用程序的每个构建生成一个新的UUID,并唯一标识该构建。即使使用相同的编译器设置从相同的源代码重建功能相同的可执行文件,它也将具有不同的构建UUID

例如,如果有库libfoo.dylib,则调试符号文件 将是libfoo.dylib.dSYM

长话短说

  • DWARF只是一个调试文件

  • DWARF with dSYM File是一个调试文件以及符号化文件


专业提示:

在我们项目的GitHub repo上,在发布部分,我们有如下内容:

我们手动上传
.ipa
dysm
文件,因此,如果3个月后用户对我们的10.16版本出现奇怪的崩溃,那么我们将转到该发行分支并使用此dsym运行它,并尝试重现该问题。

DWARF(使用属性记录格式进行调试)是许多编译器和调试器用于支持源代码级调试的调试文件格式。它是对象文件中调试信息的格式。程序的DWARF描述是一种树结构,其中每个节点都可以有子节点或兄弟节点。节点可以表示类型、变量或函数

资料来源:


DWARF with dSYM文件存储应用程序的调试符号

crashlytics之类的服务使用它将崩溃日志中的符号替换为适当的方法名称,因此它将可读并有意义

资料来源:

从“项目编辑器帮助”中:

调试信息格式(调试信息格式)

要生成的调试信息的类型

DWARF:对象文件和链接产品将使用DWARF作为调试信息格式。矮子


DWARF with dSYM File:对象文件和链接产品将使用DWARF作为调试信息格式,Xcode还将生成一个dSYM文件,其中包含各个对象文件中的调试信息(dSYM文件不需要,也不会为静态库或对象文件产品创建)。dwarf with dsym

dwarf with dsym都可以像在所有其他平台上一样创建dwarf调试信息,但它们在调试或符号化时访问调试信息的位置不同:

DWARF表示调试信息保留在.o文件中,并且在生成过程中不会链接此调试信息。每个.o文件将包含未链接的DWARF,调试程序(LLDB,GDB)将在调试时动态链接调试信息。主可执行文件包含符号表中包含的调试映射,其中包含链接调试信息所需的所有内容。映射包含指向每个.o文件的STAB符号条目,并告诉调试器或链接器需要链接的所有内容(对于函数、全局变量和静态变量)。调试信息的效率会降低,因为它没有链接,并且每个.o文件都可以包含在其他.o文件中也可以找到的类型定义,因此总体调试信息的大小会更大。这通常对于您在实现新功能或试图跟踪bug时执行的编辑/编译/调试周期最有用。好处是在构建过程中不必链接调试信息。并非所有解析调试信息的工具都支持这种调试信息模式,因此,如果系统上的本地崩溃报告在回溯中不包含源文件和行信息,则可能需要创建dSYM文件。sample、ReportCrash和需要解析调试信息的工具可能不支持DWARF设置

DWARF with dSYM意味着在构建可执行文件后,将使用名为
dsymutil
的工具链接dSYM调试信息文件
dsymutil
在链接可执行文件以解析主可执行文件中的调试映射并生成包含所有调试信息的dSYM文件后运行。如果项目中有大量代码,链接调试信息可以增加构建时间。所有.o文件中的DWARF调试信息都智能地链接到dSYM文件中。任何死板剥离的代码都将删除其调试信息,
dsymutil
将在调试信息中保留唯一的类型,因此生成的DWARF更小、效率更高。在生成版本时,或者如果您的生成计算机是c,请使用此设置
$ dwarfdump --uuid ~/a.out
UUID: E76A2647-AFB4-3950-943A-CB1D701B7C07 (x86_64) ~/a.out
$ mdfind E76A2647-AFB4-3950-943A-CB1D701B7C07
/Users/admin/a.out.dSYM