使用Instruments分析IPhone应用程序时缺少符号名称

Mac*_*ist 58 iphone xcode profiling symbols instruments

我正在通过命令行编译一个IPhone应用程序(所以没有涉及XCode选项),我无法在使用Instruments进行分析时显示我的符号名称.我已经尝试了几个标志,如-gdawrf-2和-g,没有任何成功.我也尝试使用dsymutils生成.dSYM文件,但我不知道我应该如何使用它以便失败.

任何帮助将不胜感激!

Ant*_*ine 90

我将项目设置更改为在构建时不包含dSYM文件:

在此输入图像描述

将其更改为包含dSYM文件帮助分析器对符号进行符号化并修复了我的问题:

在此输入图像描述

  • 非常有趣的是,Debug默认不包含dSYM文件!:/感谢分享这个.现在分析显示所有符号!:) (3认同)
  • @Jona:生成dSYM文件的弊端是构建过程要花费更长的时间-这就是为什么Debug构建默认情况下不包含它们的原因,因为您通常希望能够快速构建和运行。 (2认同)
  • 我想这就是为什么默认情况下 Xcode 会在您选择“Build for profiling”时进行“发布”构建的原因 (2认同)

you*_*ist 61

我还有这个问题.

我的问题是我能够看到生成的dSYM文件,但是仪器没有把它拿起来.

要解决此问题,请执行以下操作:

  1. 找到你的dSYM文件(应该在〜/ Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_TYPE] - [DEVICE-TYPE] /
  2. 在Instruments停止的情况下,单击File - > Re-Symbolicate Document
  3. 使用您的应用名称向下滚动到该条目
  4. 单击"定位",然后从步骤1中选择文件夹
  5. 单击"开始"按钮开始分析

  • @bendytree我刚刚将目标中的签名从分发更改为开发人员,这有帮助. (6认同)
  • 哦,而且,使用最新版本的XCode,DerivatedData位于*project*的目录中,而不是〜/ Library. (2认同)
  • 这对我有用,但是在Xcode 7上,我不必定位dSYM。我只需要转到“文件”>“符号”,然后单击“完成”即可解决问题。如果确实需要找到dSYM,则DerivedData现在位于〜/ Library / Developer / Xcode / DerivedData。 (2认同)

Mac*_*ist 35

Instruments如何获取调试信息:

仪器从.dSYM文件获取调试信息,该文件通常由XCode自动生成,当调试信息格式设置为DWARF时,dSYM文件与生成调试符号选项框中的复选标记相结合.设置这些选项将为XCode构建过程添加额外的步骤,并在编译应用程序后生成dSYM文件.每个dSYM都使用一个UUID构建,该UUID对应于它所源自的二进制文件中Mach-O部分中的UUID.Spotlight导入程序会索引Mac上Spotlight可访问位置中的每个dSym文件的UUID.因此,SPOTLIGHT可以完成所有黑魔法并负责在您运行的.app和相应的.dSYM文件之间建立链接.

如何在没有XCode的情况下生成调试信息和dSYM文件:

确保使用-gdwarf-2和-g标志编译.(其他标志组合可能有效)

-g以操作系统的本机格式(stabs,COFF,XCOFF或DWARF 2)生成调试信息.GDB可以使用此调试信息.在大多数使用stabs格式的系统上,-g允许使用只有GDB才能使用的额外调试信息; 这些额外的信息使得调试在GDB中工作得更好,但可能会使其他调试器崩溃或拒绝读取程序.如果要确定是否生成额外信息,请使用-gstabs +, - gstabs,-gxcoff +, - gxcoff或-gvms(参见下文).GCC允许您使用-g和-O.优化代码所采用的快捷方式有时会产生令人惊讶的结果:您声明的某些变量可能根本不存在; 控制流可能会短暂地移动到你没想到的地方; 某些陈述可能无法执行,因为它们会计算出不变的结果,或者它们的值已经存在; 一些语句可能在不同的地方执行,因为它们被移出循环.
然而,它证明可以调试优化的输出.这使得将优化程序用于可能存在错误的程序是合理的.

-gdwarf-2以DWARF版本2格式生成调试信息(如果支持).这是DBX在IRIX 6上使用的格式.使用此选项,GCC在有用时使用DWARF版本3的功能; 版本3向上兼容版本2,但仍可能导致旧版调试器出现问题.

使用dsymutil生成dSYM文件.如果在命令行中无法识别该工具,请使用聚光灯查找它.重要提示:如果您正在使用网络驱动器,请在生成dSYM之前将.app文件放在mac HD上.

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

将.dSYM文件放在mac的本地驱动器上,然后像往常一样运行Instruments.

重置聚光灯的索引:

如果没有显示符号,可能是因为spotligh被窃听.您可以尝试通过将包含dSYM文件(甚至是您的驱动器)的文件夹添加到聚光灯首选项中的"防止聚光灯搜索这些位置",然后立即将其删除来尝试重置聚光灯的索引.

  • 谢谢.我以前从Spotlight索引中排除了我的Xcode DerivedData文件夹,以帮助Spotlight找到正确的.dsym来表示崩溃日志.删除它就可以了. (2认同)

Mat*_*lly 15

在Xcode 4.5中,您可以选择从调试或发布版本配置文件.释放默认值以在复制到设备时剥离符号.在不破坏发布配置的情况下,切换到Debug配置以进行性能分析非常容易.为此,从XCode菜单中选择Product - > Edit Scheme.从出现的方案列表中选择"配置文件",然后为其选择正确的构建配置.

或者您可以单独发布/配置文件配置,并在您的方案的"配置文件"部分中使用它." XCode用户指南"中介绍了如何添加单独的构建配置.


Ant*_*nko 5

使用Xcode 6 Instruments,您可以提供dSYM文件,如下所示:

  • File-> Symbols ...菜单(停止分析时)
  • 选择您的应用,然后按“ 定位”按钮
  • 选择包含dSYM的路径(通常是〜/ Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_CONFIGURATION]-[TARGET_PLATFORM] /)。提示:您可以从终端复制此路径,并?+SHIFT+G在对话框中使用OS X快捷方式。

另外,Instruments还会询问您是否将来应使用所选路径来尝试为此应用加载dSYM。回答是:)


小智 5

花了三天时间试图弄清楚Xcode 7.1/7.3 ...

将部署目标更改为最新版本(当时为9.3)为我解决了这个问题.我的公司以7.0为目标,因此我可能需要创建一个自定义Scheme来分析Instruments中的代码,以避免在我们进行生产发布时更改目标(或忘记更改目标).

如果dSYM无法根据部署目标工作,它似乎可能是一个错误?

  • 为这个答案+1,我基本上尝试了所有我能找到的与dSYM文件,聚光灯,构建方案,调试符号格式等有关的东西.没有什么能修复,但是切换到最新的部署目标,立即找到符号.现在我考虑一下,我认为这也可能解释了为什么调试导航器在运行较低的部署目标时从未显示任何内存或CPU统计信息.苹果没有出现某种警告或其他方式的方式: - / (3认同)