我尝试了几个标志,如
-gdawrf-2
和-g
,但都没有成功。我还尝试使用dsymutil
生成一个.dSYM
文件,但是我不知道该如何使用它,所以也失败了。-gdawrf-2
和-g
,但都没有成功。我还尝试使用dsymutil
生成一个.dSYM
文件,但是我不知道该如何使用它,所以也失败了。我更改了项目设置,编译时不包括dSYM文件:
将其更改为包括dSYM文件有助于剖析器解码符号并解决我的问题:
我仍然遇到了问题。
我的问题是,虽然我能看到dSYM文件已经生成,但Instruments没有识别它。
为了解决这个问题,请执行以下操作:
调试优化输出。这使得针对可能存在缺陷的程序使用优化器非常合理。-g 以操作系统的本地格式(stabs、COFF、XCOFF或DWARF 2)生成调试信息。 GDB可以使用这些调试信息。在大多数使用stabs格式的系统上, -g启用了只有GDB能够使用的额外调试信息;这些额外信息使得GDB中的调试工作更加顺畅, 但很可能会导致其他调试器崩溃或拒绝读取程序。 如果您想要控制是否生成额外的信息,请使用-gstabs+、-gstabs、-gxcoff+、-gxcoff或-gvms(见下文)。 GCC允许您在-O选项中使用-g。优化代码采取的快捷方式可能会产生令人惊讶的结果: 您声明的某些变量可能根本不存在;流程控制可能会短暂地移动到您没有预料到的位置; 一些语句可能不会执行,因为它们计算出常数结果或者它们的值已经准备好了; 一些语句可能在不同的位置执行,因为它们被移出了循环。
尽管如此,这仍然证明了生成调试信息是可能的。
-gdwarf-2 生成DWARF版本2格式的调试信息(如果支持的话)。IRIX 6上的DBX使用此格式。使用此选项时,GCC在有用时使用DWARF版本3的功能;版本3向上兼容版本2,但仍可能对旧调试器造成问题。
使用dsymutil生成dSYM文件。如果命令行中未识别该工具,则使用Spotlight查找它。 重要提示:如果您正在使用网络驱动器,请将.app文件放在Mac硬盘上生成dSYM之前。
dsymutil MyApp.app/MyApp -o MyApp.app.dSYM
将.dSYM文件放在Mac的本地驱动器上,并像往常一样运行Instruments。
重置Spotlight的索引:
如果没有显示符号,可能是因为Spotlight出现故障。您可以尝试通过将包含dSYM文件的文件夹(甚至是驱动器)添加到Spotlight首选项的“防止Spotlight搜索这些位置”中,然后立即将其删除来重置Spotlight的索引。
在 Xcode 4.5 中,您可以选择从Debug或Release构建中进行Profile。Release默认情况下在复制到设备时剥离符号。非常容易切换到Debug配置以进行分析,而不会破坏您的发布配置。要执行此操作,请从XCode菜单中选择Product->Edit Scheme。从出现的方案列表中选择“Profile”,然后选择正确的Build Configuration。
或者,您可以创建单独的release/profile配置,并在方案的Profile部分中使用该配置。如何添加单独的构建配置在XCode用户指南中有描述。
使用 Xcode 6 Instruments,您可以按以下方式提供 dSYM 文件:
⌘+SHIFT+G
。Instruments还会询问您是否应将所选路径用于将来尝试加载此应用程序的dSYM。回答是 :)
我花了三天时间试图解决这个问题,针对Xcode 7.1/7.3版本...
将部署目标更改为最新版本(当时是9.3)解决了我的问题。 我的公司目标是7.0,因此我可能不得不创建一个自定义方案,在使用Instruments中对代码进行分析,以避免在生产发布时需要更改目标(或忘记更改目标)。
如果dSYMs未能基于部署目标运行,那么似乎这很可能是一个错误?
$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/
-g
开关已传递给编译器 - 当在不同的构建配置上更改项目和/或目标级别的设置时,很容易弄错这一点。