接着 Macaca 实现 IOS Monkey 测试 聊,c 语言早就忘干净了,各种语言都是相通的,连蒙带猜的方式修改了 idevicecrashreport.c 文件,优化了一个功能,新增了一个功能。

idevicecrashreport 的问题

打算使用 idevicecrashreport 处理 crash 报告,但是发现 idevicecrashreport 一年多没有更新了,使用过程中发现一些问题

原版执行的结果如下,两个问题

MACdeMacBook-Pro:log MAC$ /usr/local/bin/idevicecrashreport -k .
Copy: /JetsamEvent-2017-03-22-091417.ips
Copy: /TuNiuApp-2017-03-21-184033.ips
Copy: /WiFi/WiFiManager/wifi-buf-02-17-2017__11:37:19.log
Copy: /WiFi/WiFiManager/wifi-buf-02-17-2017__14:30:48.log
Copy: /WiFi/WiFiManager/wifi-buf-02-17-2017__15:50:44.log
Copy: /WiFi/WiFiManager/wifi-buf-02-19-2017__16:12:35.log
Copy: /WiFi/WiFiManager/wifi-buf-02-22-2017__11:49:01.log
Copy: /WiFi/WiFiManager/wifi-buf-02-22-2017__12:02:49.log
Copy: /WiFi/WiFiManager/wifi-buf-03-03-2017__14:34:33.log
Copy: /WiFi/WiFiManager/wifi-buf-03-03-2017__14:47:16.log
Copy: /WiFi/WiFiManager/wifi-buf-03-06-2017__18:11:38.log
Copy: /WiFi/WiFiManager/wifi-buf-03-06-2017__21:31:36.log
Copy: /WiFi/WiFiManager/wifi-buf-03-10-2017__16:33:06.log
Copy: /WiFi/WiFiManager/wifi-buf-03-16-2017__01:11:13.log
Copy: /mediaserverd.apscal-2017-03-21.log
Done.
MACdeMacBook-Pro:log MAC$ 

帮助命令可以查看添加的功能

MACdeMacBook-Pro:log MAC$ /usr/local/bin/idevicecrashreport -h
Usage: idevicecrashreport [OPTIONS] DIRECTORY
Move crash reports from device to a local DIRECTORY.

  -e, --extract     extract raw crash report into separate '.crash' file
  -k, --keep        copy but do not remove crash reports from device
  -d, --debug       enable communication debugging
  -u, --udid UDID   target specific device by its 40-digit device UDID
  -g, --grep        grep crash filename
  -h, --help        prints usage information

Homepage: <http://libimobiledevice.org>

实际使用效果如下:

MACdeMacBook-Pro:log MAC$ /usr/local/bin/idevicecrashreport -k -g TuNiuApp .
Copy: /TuNiuApp-2017-03-21-184033.ips
Done.
MACdeMacBook-Pro:log MAC$ 

github

地址:https://github.com/baozhida/libimobiledevice

修改的文件 :https://github.com/baozhida/libimobiledevice/blob/master/tools/idevicecrashreport.c

直接下载然后自己编译,编译方式同第一行提到的帖子

PS 题外话

自动获取 crash 日志可以通过 idevicecrashreport 脚本完成了,下面计划完成自动解析 crash 文件(xcode 查看 crash 日志,有些可以直接符号化,一些则不能,需要借助.dsYM 文件和 symbolicatecrash 脚本完成解析,没有 xcode 打开查看过的 crash 直接使用 idevicecrashreport 下载的 crash 文件都是没有符号化处理的)

什么是符号表

符号表就是指在 Xcode 项目编译后,在编译生成的二进制文件.app 的同级目录下生成的同名的.dSYM 文件。

.dSYM 文件其实是一个目录,在子目录中包含了一个 16 进制的保存函数地址映射信息的中转文件,所有 Debug 的 symbols 都在这个文件中 (包括文件名、函数名、行号等),所以也称之为调试符号信息文件。

符号表有什么用

符号表就是用来符号化 crash log(崩溃日志)。crash log 中有一些方法 16 进制的内存地址等,通过符号表就能找到对应的能够直观看到的方法名之类。

如何得到.dsYM 文件

我们在 Archive 的时候会生成.xcarchive 文件,然后显示包内容就能够在里面找到.dsYM 文件和.app 文件。

Done


↙↙↙阅读原文可查看相关链接,并与作者交流