关于日志打印和过滤的那点破事
前两天,重启电脑突然发现我的iOS8
设备无法连接到MacOS
了。。
MMP,也就是说没有办法使用Xcode调试、之前使用的日志查看也没有办法继续。。
具体报错如下:Xcode<Version 9.4 (9F1027a)>
报错如下: (我安装过Xcode10 beta1
)
iTunes
报错如下:
1 | iTunes 无法连接 iPhone “iPhone”,因为收到来自此设备的无效响应。 |
Apple Configurator2
报错如下:
1 | 已收到设备上的意外响应。 |
还是 先来聊一下日志打印的几种方案吧。
手机可以连接到MacOS
这种情况是最常见的,就是能在Xcode下Debug….
方案一:Console.app(控制台)
这是MacOS自带的日志神器~ 效果顶呱呱👍👍👍,截图如下:
具体用法我就不说了。。。毕竟都是中文😂
方案二:LogGuru
madordie/LogGuru 也不错,很久之前fork自FIRHQ/LogGuru,增加了直接过滤的功能,要不然速度真的很慢。。
只要插入USB,即可显示日志,还是不错滴。。
方案三: 其他的
还有很多方案,比如说命令行啊、其他的工具啊,我就不说了,我觉得 Console.app(控制台) 就够了😂
手机无法链接进MacOS
也就是最开始说的报错的情况下,可以连接进MacOS的方案均无法使用。苦逼,只能让iOS打印日志了。。
下面都是 越狱环境 下的。。不越狱还有人用iOS8么😂
先来看个文档:The iPhone Wiki/System Log,这里提供了很多方案,也非常全面,值得一试。
苦逼的事情是我手上的iOS8.4.1无法使用syslogd to /var/log/syslog
插件,尝试使用On-device with saving to a file via a Python script的方案去解决也并不如意。。
开始用On-device with socat( 在iosre中也有一个类似的文章:iOS查看日志利器 —— socat),说的都是相当的详细。
socat的坑
stop没有用
输入watch查看,输入stop停止(不过停止貌似没用,也不知道为啥,知道的请告诉我)
这个真的是没有用,所以watch
功能就很鸡肋。。
没有办法实时过滤
文中提到了很多过滤条件,但是一旦开启过滤,就没有办法显示实时日志。。也就是说无法和watch
共存。。。
换个姿势使用socat
socat
的日志都在终端上,不着色不说还有上面的两个很影响使用的问题。。。于是乎,为了增加过滤功能,需要通过管道将输出接入另外的命令如:grep
等。
socat
命令需要手动输入watch
才能显示出实时命令,这个让管道并不能直接使用。这里需要借助expect
命令。
好了所有的点都通了,大致步骤如下:
在mac上安装expect
1 | brew install expect |
在mac的~/.bash_profile配置
此处假设你的设备已经按照iOS逆向-设备ssh免密登录配置好了:
1 | function ios-socat() { |
ios-socat
函数名,在命令行可以直接输入函数名调用该函数i5s
在~/.ssh/config
中配置的名字
如果没有配置ssh免密呢需要这样:
1 | function ios-socat() { |
-p22
端口号,22是默认不用写,但是其他的需要写。ios's_ip
iOS设备的ip。mypassword
iOS设备密码- 这个我没测。。大致如此,我对
expect
的语法也不是很熟
最后别忘了让~/.bash_profile
生效:
1 | source ~/.bash_profile |
然后只需要在命令行输入ios-socat
就可以看到蹭蹭蹭的日志打印咯。。至于用什么管道啊都不是问题。
比如:
只显示包含iosre
关键字的日志
1 | ios-socat | grep iosre |
晋级用法
我还不清楚究竟什么原因导致了收到来自此设备的无效响应
错误,布吉岛系统修改了什么。我尝试重新安装iTunes、Xcode都无效(据说陌陌的开发为这个无法调试直接将系统降级是可以的😂)。。有老铁懂得指点下~~
目前虽然上面都可以用,但是看个日志并不能满足我的野心,最后在移动硬盘里做了一个10.12的系统😂,用了Console.app…