Xia Weipin’s Blog

 
10 June 2011 by Published in: Developer Tags: No comments yet

为了看到crash log中的具体调用方法名(而不只是一个内存的地址),Xcode需要找到和生成该crash log相对应的app程序包以及dSYM文件。这也是为什么要保存好Xcode生成的archive文件。

因为Xcode是通过Spotlight寻找相应文件的,所以Spotlight功能必须打开并能正常工作。在Spotlight里用app的名字查一下看能不能找到对应的archive,可以的话基本就没有问题。

升级到Xcode 4后,symbolicating开始无法正常工作(Spotlight是能找到archive的)。直接用命令行(/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash)执行,可以看到如下错误:

Can’t understand the output from otool ( -> ‘\/Developer\/Platforms\/iPhoneOS\.platform\/Developer\/usr\/bin\/otool -arch armv7 -l /Users/xia/Library/Developer/Xcode/DerivedData/FeedVoyager-dcfufspdfglmrfgxqwqtkhgnxfew/Build/Products/Debug-iphonesimulator/FeedVoyager.app/FeedVoyager’) at bin/symbolicatecrash line 323.

看上去是symbolicating找错了文件。Crash来自已经发布的app,不可能是在Debug-iphonesimulator下面。删除Debug-iphonesimulator下的文件并清空回收站后,问题解决(symbolicating能找到正确的archive文件)。

对此的另外三个解决方法是(我倾向第二种):

  • 将~/Library/Developer/Xcode/DerivedData/加入Spotlight的隐私保护目录。
  • 创建一个额外的目录并将其加入Spotlight的隐私保护目录,然后再将symbolicating找错的文件(目录)“移”(move)进去。
  • 坐着干等直到Apple更新Xcode解决这个问题。

此外还有两点补充:

  • 看上去需要管理员权限的帐号才能让symbolicating正常工作(这点未完全证实)。
  • 可以用ln命令为symbolicating创建一个“连接”,方便使用。比如:
  • ln -s /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash ~/bin/symbolicatecrash

Comments

Comments are closed.

Copyright © Xia Weipin,转载需明示出处
Powered by WordPress