我想尝试和象征我的iPhone应用程序的崩溃报告。
我从iTunes Connect上找到了崩溃报告。我有提交给App Store的应用程序二进制文件,我有作为构建的一部分生成的dSYM文件。
我将所有这些文件放在一个目录中,该目录以spotlight为索引。
现在该做什么?
我试着引用:
symbolicatecrash crashreport.crash myApp.app.dSYM
它只输出与崩溃报告开始时相同的文本,没有符号。
我做错什么了吗?
我想尝试和象征我的iPhone应用程序的崩溃报告。
我从iTunes Connect上找到了崩溃报告。我有提交给App Store的应用程序二进制文件,我有作为构建的一部分生成的dSYM文件。
我将所有这些文件放在一个目录中,该目录以spotlight为索引。
现在该做什么?
我试着引用:
symbolicatecrash crashreport.crash myApp.app.dSYM
它只输出与崩溃报告开始时相同的文本,没有符号。
我做错什么了吗?
当前回答
使用Xcode 4,任务更简单:
开放的组织者, 单击左列的Library | Device Log 点击屏幕底部的“导入”按钮…
瞧。日志文件将自动导入并被符号化。如果你先使用Xcode -> Product -> Archive存档构建。
其他回答
对于那些使用Airbrake的人,上面有一个可靠的回应,但如果不进行调整,它对我来说是无效的:
工作的一些内存地址,但不是其他人,不确定为什么…
在桌面或任何地方创建新目录 在Xcode管理器中找到有问题的存档 双击在查找器中显示 双击显示捆绑包内容 复制。dsym文件和。app文件到新目录 CD进入新目录 atos -arch armv7 -o 'Vimeo.app'/'Vimeo' 终端将进入交互移动 粘贴内存地址并按enter键,它将输出方法名称和行号 或者,输入以下命令:atos -arch armv7 -o 'Vimeo.app'/'Vimeo' 只获取一个地址的信息
我有点不爽的事实,这里似乎没有什么“只是工作”,所以我做了一些调查,结果是:
设置:接收报告的QuincyKit后端。没有任何象征意义,因为我甚至不知道他们在建议我怎么做才能让它起作用。
解决办法:从服务器在线下载崩溃报告。它们被称为“crash”,默认情况下进入~/Downloads/文件夹。考虑到这一点,这个脚本将“做正确的事情”,崩溃报告将进入Xcode(组织者,设备日志),符号化将完成。
脚本:
#!/bin/bash
# Copy crash reports so that they appear in device logs in Organizer in Xcode
if [ ! -e ~/Downloads/crash ]; then
echo "Download a crash report and save it as $HOME/Downloads/crash before running this script."
exit 1
fi
cd ~/Library/Logs/CrashReporter/MobileDevice/
mkdir -p actx # add crash report to xcode abbreviated
cd actx
datestr=`date "+%Y-%m-%d-%H%M%S"`
mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"
如果你使用QuincyKit/PLCR,你可以通过做两件事来自动化Xcode Organizer中的拖放操作。
首先,您必须编辑远程脚本admin/actionapi.php ~第202行。它似乎没有得到正确的时间戳,所以文件以Xcode无法识别的名称“crash”结束(它想要一些。crash):
header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"');
其次,在iOS端在QuincyKit BWCrashReportTextFormatter。m ~第176行,将@"[TODO]"改为@"TODO"以避开坏字符。
我更喜欢一个脚本,将象征我的所有崩溃日志。
先决条件
创建一个文件夹,放4样东西:
symbolicatecrash perl script - there are many SO answers that tells it's location The archive of the build that match the crashes (from Xcode Organizer. simple as Show in Finder and copy) [I don't sure this is necessery] All the xccrashpoint packages - (from Xcode Organizer. Show in Finder, you may copy all the packages in the directory, or the single xccrashpoint you would like to symbolicate) Add that short script to the directory: #!/bin/sh echo "cleaning old crashes from directory" rm -P *.crash rm -P *.xccrashpoint rm -r allCrashes echo "removed!" echo "" echo "--- START ---" echo "" mkdir allCrashes mkdir symboledCrashes find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \; cd allCrashes for crash in *.crash; do ../symbolicatecrash $crash > ../symboledCrashes/V$crash done cd .. echo "" echo "--- DONE ---" echo ""
这个脚本
运行脚本时,将得到两个目录。
allCrashes -所有来自所有xccrashpoint的所有崩溃都会在那里。 symboledCrashes -相同的崩溃,但现在有了所有的符号。 你不需要在运行脚本之前从旧的崩溃中清理目录。它会自动清洗。好运!
我不得不对symbolicatecrash脚本进行大量的修改,以使其正常运行。
据我所知,symbolicatcrash现在要求.app和.dsym在同一个目录下。它将使用.dsym来定位.app,但不会使用dsym来查找符号。
在尝试这些补丁之前,你应该复制你的符号化崩溃,这将使它看起来在dsym:
getSymbolPathFor_dsymUuid函数的第212行左右
212 my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);
matchesUUID函数的第265行左右
265 return 1;
尽管我已经开发了几年的应用程序,这是我第一次调试二进制文件,我觉得自己像一个完全的NOOB,弄清楚所有的文件在哪里,即*在哪里。应用程序*。dSYM和崩溃日志?为了弄清楚这个问题,我不得不阅读多篇文章。图片胜过千言万语,我希望这篇文章能在将来对其他人有所帮助。
1-首先去itunesconnect下载你的崩溃日志。 注意:在大多数情况下,您可能会得到类似于“提交的报告太少而无法显示报告”的内容。基本上没有足够多的用户向苹果提交崩溃日志报告,在这种情况下,你什么都做不了。
2-现在如果你没有改变你的代码,因为你已经提交了你的二进制文件给苹果,然后启动Xcode的项目,并再次执行Product -> Archive。否则,只需找到您最近提交的二进制文件,并右键单击它。