草帽路飞UU 发表于 2017-6-27 15:23:12

[libimobiledevice 优化] iOS Crash日志获取工具 idevicecrashreport 功能优化

接着 Macaca 实现 IOS Monkey 测试 聊,c语言早就忘干净了,各种语言都是相通的,连蒙带猜的方式修改了idevicecrashreport.c 文件,优化了一个功能,新增了一个功能。
idevicecrashreport的问题打算使用idevicecrashreport 处理crash报告,但是发现idevicecrashreport 一年多没有更新了,使用过程中发现一些问题
原版执行的结果如下,两个问题
    1./WiFi/WiFiManager/wifi-buf-02-17-2017__11:37:19.log log文件是完全没有必要下载的
    2./JetsamEvent-2017-03-22-091417.ips 非测试app的crash文件,我期望可以过滤下载

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$

    针对第一个问题,在idevicecrashreport脚本复制设置的文件执行先判断是否是 .ips文件,否则不下载。

    针对第二个问题,在idevicecrashreport脚本加了一个过滤文件名称的参数 -g || -grep ,比如过滤文件名 包含TuNiuApp的文件,只下载TuNiuApp的crash日志,其他app的crash日志不处理。

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

MACdeMacBook-Pro:log MAC$ /usr/local/bin/idevicecrashreport -h
Usage: idevicecrashreport 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

悠悠小仙仙 发表于 2017-6-27 15:26:12

又是你 你就好比漆黑夜里的萤火虫 那么的拉风 那么的耀眼。

悠悠小仙仙 发表于 2017-6-27 15:33:41

又是你 你就好比漆黑夜里的萤火虫 那么的拉风 那么的耀眼。

草帽路飞UU 发表于 2017-6-27 15:34:25

谢谢夸奖!
页: [1]
查看完整版本: [libimobiledevice 优化] iOS Crash日志获取工具 idevicecrashreport 功能优化