我正在通过命令行编译一个IPhone应用程序(因此不涉及XCode选项),并且我无法在使用Instruments进行分析时显示我的符号名称。我已经尝试了几个标志,如-gdawrf-2和-g,没有任何成功。我也尝试使用dsymutils生成.dSYM文件,但我不知道我应该如何使用它以便失败。
任何帮助将不胜感激!
答案 0 :(得分:86)
我在构建时将项目设置更改为不包含dSYM文件:
更改它以包含dSYM文件帮助分析器对符号进行符号化并修复了我的问题:
答案 1 :(得分:59)
我还有这个问题。
我的问题是我能够看到正在生成dSYM文件,但是仪器没有提起它。
要解决此问题,请执行以下操作:
答案 2 :(得分:35)
Instruments如何获取调试信息:
仪器从.dSYM文件获取调试信息,该文件通常由XCode自动生成,当使用dSYM文件将“调试信息格式”设置为DWARF并结合“生成调试符号”选项框中的复选标记时。设置这些选项将为XCode构建过程添加额外的步骤,并在编译应用程序后生成dSYM文件。每个dSYM都使用一个UUID构建,该UUID对应于它所源自的二进制文件中Mach-O部分中的UUID。 Spotlight导入程序会索引Mac上Spotlight可访问位置中的每个dSym文件的UUID。因此,SPOTLIGHT可以完成所有黑魔法并负责在您运行的.app和相应的.dSYM文件之间建立链接。
如何在没有XCode的情况下生成调试信息和dSYM文件:
确保使用-gdwarf-2和-g标志进行编译。 (其他标志组合可能有效)
-g 在中生成调试信息 操作系统的本机格式 (刺,COFF,XCOFF或DWARF 2)。 GDB可以使用此调试 信息。在大多数使用的系统上 stabs格式,-g允许使用额外的 调试只有GDB的信息 可以使用;这些额外的信息使 调试工作在GDB中更好,但会 可能会使其他调试器崩溃或 拒绝阅读该计划。如果你 想要控制肯定是否 生成额外信息,使用 -gstabs +, - gstabs,-gxcoff +, - gxcoff或-gvms(见下文)。 GCC允许 你使用-g和-O。快捷方式 采用优化代码可能 偶尔会产生惊人的 结果:您声明了一些变量 根本不存在;控制流程 可能会暂时移动到你没有的地方 期待它;有些陈述可能不是 执行因为他们计算 不断的结果或他们的价值观 已经在手;一些陈述可能 在不同的地方执行,因为 他们被移出了循环。
尽管如此,它证明是可能的 调试优化输出。这样做 合理使用优化器 可能有bug的程序。-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文件(甚至您的驱动器)的文件夹添加到聚光灯首选项中的“防止聚光灯搜索这些位置”,然后立即将其删除来尝试重置聚光灯的索引。
答案 3 :(得分:15)
在Xcode 4.5中,您可以选择“从调试或发布版本配置文件”。释放默认值以在复制到设备时剥离符号。在不破坏发布配置的情况下,切换到Debug配置以进行性能分析非常容易。为此,请选择产品 - >从XCode菜单编辑Scheme。选择"个人资料"从出现的方案列表中,然后为其选择正确的构建配置。
或者您可以进行单独的发布/配置文件配置,并在您的方案的“配置文件”部分中使用它。 XCode User Guide。
中介绍了如何添加单独的构建配置答案 4 :(得分:5)
花了三天的时间试图解决Xcode 7.1 / 7.3 ......
将部署目标更改为最新版本(当时为9.3)为我解决了这个问题。我的公司以7.0为目标,因此我可能需要创建一个自定义Scheme来分析Instruments中的代码,以避免在我们进行生产发布时更改目标(或忘记更改目标)。
如果dSYM无法根据部署目标运行,那么它似乎可能是一个错误?
答案 5 :(得分:4)
使用 Xcode 6 Instruments ,您可以提供 dSYM 文件,如下所示:
⌘+SHIFT+G
。此外 Instruments 将询问您是否应该使用所选路径来尝试在将来为此应用加载dSYM。回答是:)
答案 6 :(得分:2)
问题是聚光灯找不到.dSYM文件。 这是因为Apple更改了DerivedData文件夹的位置。 DerivedData现在进入〜/ Library
Spotlight不会索引〜/ Library ,并且就我能够建立而言,也无法将其编入索引(例如忽略mdimport)。< / p>
在探查器中获取符号的工作只是将数据复制到〜/ Library 之外,例如你的主目录会很好。
我使用了这个命令行:
$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/
当你杀死你的探查器并开始一个新的配置文件运行时,你会看到符号再次可用。
答案 7 :(得分:1)
检查构建日志并确保您的-g
开关正在通过编译器 - 在项目和/或目标级别更改不同构建配置等设置时,很容易出错。
答案 8 :(得分:1)
Xcode 4附带的Instruments版本的另一项解决方法是使用Instruments的File菜单下的 Re-Symbolicate Document 菜单项。此菜单项允许您使用〜/ Library / ...目录中.dSYM文件中的符号。
答案 9 :(得分:1)
根据我的经验,这通常是因为在目标设备上安装了最近修改过的应用版本之前,已经调用了“个人资料”。
尝试在设备/目标上运行应用,然后在重新安装后再次调用“配置文件”。
答案 10 :(得分:0)
我遇到了这个问题,因为XCode项目位于Spotlight无法找到dSYM文件的网络共享上。确保它在本地驱动器上。
答案 11 :(得分:0)
我创建了一个“Profile”构建配置来处理这个问题。请参阅my answer到类似的Stackoverflow问题。