iOS調試之chisel
Chisel 是一個 LLDB 指令集合,用戶輔助 iOS 應用差錯。
安裝
1.chisel的安裝需要使用Homebrew,如果還沒有安裝Homebrew,可以使用下面的命令安裝,如果你已經安裝了,可以跳過這一步
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
2.用Homebrew安裝chisel:
brew update
brew install chisel
3.在根目錄下中添加命令
touch?~/.lldbinit
echo "command script import /usr/local/opt/chisel/libexec/fblldb.py" >>?~/.lldbinit
重啟一下Xcode,安裝完成。
更新
如果你想更新chisel,只需要輸入更新的命令即可。
brew upgrade chisel
錯誤解決
1.安裝homebrew時出現錯誤的話,可以看我另外一篇文章
2.出現Error: Checksum mismatch.
解決方案:rm -rf /Users/hanhan/Library/Caches/Homebrew/portable-ruby-2.6.3.mavericks.bottle.tar.gz(替換為自己的錯誤目錄)
3.執行brew install chisel時很慢時
// 執行下面這句命令,更換為中科院的鏡像:
git clone git://mirrors.ustc.edu.cn/homebrew-core.git/ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1
// 把homebrew-core的鏡像地址也設為中科院的國內鏡像
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
// 更新
brew update
內置命令
1 pviews
這個命令可以打印一個view的層級,如:
(lldb) pviews self.window
???? |<UIWindow: 0x7fd5b6816780; frame = (0 0; 375 667);???
gestureRecognizers = <NSArray: 0x7fd5b6817770>;
??? layer = <UIWindowLayer: 0x7fd5b68263f0>>
???? | <UILayoutContainerView: 0x7fd5b6941780;
??? frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7fd5b694fc10>; layer = <CALayer: 0x7fd5b6931250>>
???? | <UINavigationTransitionView: 0x7fd5b6949620; frame = (0 0;???????????? 375 667); clipsToBounds = YES;
??? autoresize = W+H;
layer = <CALayer: 0x7fd5b6946e20>>
2 pvc
pvc可以打印一個viewcontroller的層級,而不是view 如:
(lldb) pvc self.mMDrawerController**
????? <MMDrawerController: 0x7fd5b658b8c0;
??? view = <UIView; 0x7fd5b658cd00>;? frame = (0, 0; 375,???? 667)>
???? | <SampleAlbumListVC: 0x7fd5b658bc90;
??????? view = <UIView; 0x7fd5b66be7a0>;? frame = (0, 0; 375, 667)>
???? | <SlideMenuVC: 0x7fd5b6589b50;
??????? view = <UIView; 0x7fd5b684f790>;?? frame = (inf, inf; 0, 0)>
3 visualize
visualize這個命令比較強大,它可以使用預覽App打開UImageView CGImageRef UIView CALayer 如:
visualize uiimageview
4 fv & fvc
這兩個命令是用來通過類名搜索當前內存中存在的view和viewController實例的命令,支持正則搜索。
(lldb)? fvc mm
0x7fd5b658b8c0 MMDrawerController
(lldb)fv cate
? 0x7fd5b6e06920 AlbumCategoryView
? 0x7fd5b6d63f80 AlbumCategoryView
? 0x7fd5b6d66e60 AlbumCategoryView
? 0x7fd5b6d69d40 AlbumCategoryView
? 0x7fd5b6d6cc20 AlbumCategoryView
? 0x7fd5b6e0a150 AlbumCategoryView
5 show & hide
這兩個命令用來顯示和隱藏一個指定的 UIView
?? (lldb) show self.view
?? (lldb) hide? self.view
也可以使用內存地址隱藏和現實view,比如通過 fv cate找到一個view后使用hide隱藏它
(lldb)fv cate
??? 0x7fd5b6e06920 AlbumCategoryView
(lldb) hide? 0x7fd5b6e069206.caflush
刷新UI,當調試時候,我們改變了UI的布局的時候,不用重新啟動,使用caflush刷新UI即可,作為快捷鍵使用比較好。
7.taplog
點擊屏幕,程序會暫停,會打印到你所觸摸的view。
8.pclass
打印出對象的class以及是從哪兒繼承過來的
9.pinternals
打印出對象內部的東西,有空可以看看系統的一些對象內部都有哪些東西
常用的就這些命令,當然你也可以自定義Chisel命令,但是需要你了解點python