关于Cycript中打印信息不完整的问题

1、如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
cy# SASubviews(#0x1c32ab60)
`<SBRootIconListView 0x1c32ab60: frame = {{0, 0}, {320, 348}}; Model = <SBIconListModel: 0x17f44c20; 1 icons; folder = <SBRootFolderWithDock: 0x17f45620, (null)>>>
   | <SBFolderIconView: 0x1c1ea570; frame = (16 7; 60 74); opaque = NO; layer = <CALayer: 0x1c1ea870>> Folder: <SBFolder: 0x17f44370, \u5065\u5eb7>
   |    | <SBIconLabelView: 0x1c1e9c60; baseClass = _UILegibilityView; frame = (16.5 62.5; 28 19); userInteractionEnabled = NO; layer = <CALayer: 0x1c1eaae0>>
   |    |    | <_UILegibilityImageView: 0x1c1d41b0; frame = (-12 -12; 52 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c1d4290>>
   |    |    | <_UILegibilityImageView: 0x1c1e7020; frame = (0 0; 28 19); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c1e6610>>
   |    | <SBFolderIconImageView: 0x1c1e00d0; frame = (-1 -1; 62 62); userInteractionEnabled = NO; layer = <CALayer: 0x1c1e31f0>>
   |    |    | <SBFolderIconBackgroundView: 0x17fc4a30; frame = (1 1; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x1c184940>>
   |    |    | <UIView: 0x1c2c3cd0; frame = (8.5 8.5; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x1c2babe0>>
   |    |    |    | <_SBIconGridWrapperView: 0x1c2aa7f0; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c2c11d0>>
   |    |    |    | <_SBIconGridWrapperView: 0x1c2bae90; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x190dd2a0>>`
cy#

1.1、SASubviews()内部只是简单的调用UIView的recursiveDescription方法,这里输出到止断节了,事实上后面还有很多是没有打印出来的;
1.2、网上找了一些资料,我这里使用的是iTerm2,有网友说换成系统自带的终端就不会,我试了也一样;
1.3、又有网友说将Cycript降级到0.9.505就OK了,我也试了一下,确实是可以了,但很多js方法用不了了;
1.4、当前版本是0.9.594,我把中间几个版本都试了一下,降到0.9.592是最好的,折中选择即能保证打印完整,又能支持当前我们常用的这些js方法;
1.5、又发现一个坑:iOS9.3.5在Cycript降到0.9.592的时候,AppStore下载的应用会报错

1
2
Sian-iPhone4s:~ root# cycript -p WeChat
*** _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), sizeof(address))):../Handler.cpp(169):CYHandleSocket [errno=1]

所以,根据情况切吧…目前只能这样…

Leave a Reply