我正在通过命令行编译IPhone应用程序(因此不涉及XCode选项),但在使用工具进行评测时无法获得要显示的符号名称。我尝试了几个标志,比如-gdawrf-2和-g,但都没有成功。我也尝试过使用dsymutils来生成.dSYM文件,但我不知道该如何使用它,所以也失败了。
任何帮助都将不胜感激!
发布于 2010-05-21 02:55:16
Instruments如何获取调试信息:
仪器从.dSYM文件获取调试信息,该文件通常由XCode在将调试信息格式设置为DWARF时由dSYM文件结合生成调试符号选项框中的复选标记自动生成。设置这些选项将在XCode构建过程中添加额外的步骤,并在编译应用程序后生成dSYM文件。每个dSYM都是使用UUID构建的,该UUID对应于从中派生它的二进制文件中的Mach-O部分中的UUID。聚光灯导入器对Mac上聚光灯可访问位置中的每个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允许您在-O中使用-g。优化代码采用的捷径有时可能会产生令人惊讶的结果:您声明的某些变量可能根本不存在;控制流可能会短暂地移动到您预期之外的位置;某些语句可能无法执行,因为它们计算常量结果或它们的值已经在手边;一些语句可能会在不同的位置执行,因为它们被移出了循环。
然而,事实证明,调试优化的输出是可能的。这使得对可能有bug的程序使用优化器是合理的。-gdwarf-2生成DWARF版本2格式的调试信息(如果支持)。这是IRIX 6上的DBX使用的格式。通过此选项,GCC在有用时使用DWARF版本3的功能;版本3与版本2向上兼容,但仍可能对较旧的调试器造成问题。
使用dsymutil生成dSYM文件。如果该工具在命令行中无法识别,请使用spotlight找到它。重要提示:如果您使用的是网络驱动器,请在生成dSYM之前将.app文件放在mac上。
dsymutil MyApp.app/MyApp -o MyApp.app.dSYM
将.dSYM文件放在mac的本地驱动器上,然后像往常一样运行Instruments。
Resettig spotlight的索引:
如果符号没有显示,可能是因为spotligh被窃听了。您可以尝试重置spotlight的索引,方法是将包含dSYM文件的文件夹(甚至驱动器)添加到spotlight首选项中的“阻止spotlight搜索这些位置”,然后立即将其删除。
发布于 2015-03-20 16:03:49
我更改了项目设置,以便在构建时不包含dSYM文件:

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

发布于 2011-10-21 01:47:28
我仍然对此有意见。
我的问题是,我能够看到生成的dSYM文件,但工具不能提取它。
要解决此问题,请执行以下操作:
https://stackoverflow.com/questions/2776466
复制相似问题