为了看到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文件)。
对此的另外三个解决方法是(我倾向第二种):
此外还有两点补充:
ln -s /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash ~/bin/symbolicatecrash
Comments
Comments are closed.