关于日志打印和过滤的那点破事

前两天,重启电脑突然发现我的iOS8设备无法连接到MacOS了。。

MMP,也就是说没有办法使用Xcode调试、之前使用的日志查看也没有办法继续。。

具体报错如下:
Xcode<Version 9.4 (9F1027a)>报错如下: (我安装过Xcode10 beta1)
Xcode报错

iTunes报错如下:

1
iTunes 无法连接 iPhone “iPhone”,因为收到来自此设备的无效响应。

iTunes报错

Apple Configurator2报错如下:

1
已收到设备上的意外响应。

Apple Configurator2报错

还是 先来聊一下日志打印的几种方案吧。

手机可以连接到MacOS

这种情况是最常见的,就是能在Xcode下Debug….

方案一:Console.app(控制台)

这是MacOS自带的日志神器~ 效果顶呱呱👍👍👍,截图如下:
Console.app

具体用法我就不说了。。。毕竟都是中文😂

方案二: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没有用

iOS查看日志利器 —— socat所说:

输入watch查看,输入stop停止(不过停止貌似没用,也不知道为啥,知道的请告诉我)

这个真的是没有用,所以watch功能就很鸡肋。。

没有办法实时过滤

文中提到了很多过滤条件,但是一旦开启过滤,就没有办法显示实时日志。。也就是说无法和watch共存。。。

换个姿势使用socat

socat的日志都在终端上,不着色不说还有上面的两个很影响使用的问题。。。于是乎,为了增加过滤功能,需要通过管道将输出接入另外的命令如:grep等。

socat命令需要手动输入watch才能显示出实时命令,这个让管道并不能直接使用。这里需要借助expect命令。

好了所有的点都通了,大致步骤如下:

在mac上安装expect

1
brew install expect

在mac的~/.bash_profile配置

此处假设你的设备已经按照iOS逆向-设备ssh免密登录配置好了:

1
2
3
4
5
6
7
8
function ios-socat() {
expect -c "
spawn ssh i5s \"socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock\"
expect {
\"> \" {send \"watch\n\";}
}
interact"
}
  • ios-socat 函数名,在命令行可以直接输入函数名调用该函数
  • i5s~/.ssh/config中配置的名字

如果没有配置ssh免密呢需要这样:

1
2
3
4
5
6
7
8
9
function ios-socat() {
expect -c "
spawn ssh -p22 root@ios's_ip \"socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock\"
expect {
\"*password: \" {send \"mypassword\n\";}
\"> \" {send \"watch\n\";}
}
interact"
}
  • -p22 端口号,22是默认不用写,但是其他的需要写。
  • ios's_ip iOS设备的ip。
  • mypassword iOS设备密码
  • 这个我没测。。大致如此,我对expect的语法也不是很熟

最后别忘了让~/.bash_profile生效:

1
source ~/.bash_profile

然后只需要在命令行输入ios-socat就可以看到蹭蹭蹭的日志打印咯。。至于用什么管道啊都不是问题。

比如:
只显示包含iosre关键字的日志

1
ios-socat | grep iosre

晋级用法

  • 我的iOS设备通过iproxy来进行端口映射。具体用法移步Google

  • 通过ios-socat > ~/Desktop/ios.log 然后下载LogTail,剩下的摸索一下咯

    最后

我还不清楚究竟什么原因导致了收到来自此设备的无效响应错误,布吉岛系统修改了什么。我尝试重新安装iTunes、Xcode都无效(据说陌陌的开发为这个无法调试直接将系统降级是可以的😂)。。有老铁懂得指点下~~

目前虽然上面都可以用,但是看个日志并不能满足我的野心,最后在移动硬盘里做了一个10.12的系统😂,用了Console.app…