遷移老文章到掘金
簡介
App內控制檯,可以在脫離Xcode debug的情況下,除錯記憶體,列印資料,修改UI等
方便在黑盒測試+內部體驗的環境下,發現Bug後,直接在Bug現場除錯記憶體,分析問題
先大體看一下GIF動畫如何使用
Git地址 VKDebugConsole
恩 基於JSPatch做的 ╮(╯_╰)╭
吐槽:介面好難看。。NSLog很多的時候有點亂。。
基本上初步的功能都補全了,能在自己專案裡用上了,還算方便
後續優化指令,優化功能,優化介面,還需要持續進行(眼下這個看著太難看,指令也太難用了)
基本使用
[VKDebugConsole showBt]
方法會在window上增加一個debug按鈕- 點一下會變成select狀態,觸控螢幕中任何view可以選擇一個target
- 選擇target後,console控制檯開啟,按鈕變為Hidden
- 上部分為輸入區,輸入除錯程式碼
- 下部分為輸出區,輸出除錯資訊,NSLog資訊,除錯錯誤(未來還會擴充套件其他
- 再次點選Hidden按鈕會退出控制檯
除錯程式碼
因為是基於JSPatch的,所有JSPatch的語法規則這裡都一模一樣可以使用,可以參考一下動畫中的用法,不過大部分用法還是遵從JSPatch,戳這裡看如何使用 JSPatch語法
除了JSPatch支援的基本語法,還支援如下幾條命令
target()
:獲取剛才通過手選的介面ViewtargetVC()
獲取剛才通過手選的介面View所在的VCgetParentVC(v)
輸入一個View,獲取所在的VCprint(item)
輸出一個物件到控制檯,單獨處理了Label和View的描述資訊,更加方便直觀(可以擴充套件更多單獨處理的物件型別)changeSelect()
重新手選獲取新targetexit()
退出控制檯clearOutput()
清空控制檯輸出區clearInput()
清空控制檯輸入區
支援剪貼簿
很明顯,在APP黑盒的情況下,寫程式碼是非常不方便的,用手機上面的軟鍵盤,於是支援了剪貼簿
- 開啟控制檯
- 在電腦上的編輯器裡寫好程式碼
- 無論以QQ微信等各種形式發到手機上,在手機上覆制
- 切回APP顯示控制檯的時候,會自動把剪貼簿的內容,複製到輸入區
支援NSLog
寫一個這樣的巨集在你的pch裡面,覆蓋NSLog
#ifndef __OPTIMIZE__
#import "VKLogManager.h"
#define NSLog(...) NSLog(__VA_ARGS__);\
VKLog(__VA_ARGS__)\
#else
#define NSLog(...) {}
#endif
複製程式碼
在執行NSLog的同時,再自動執行一次VKLog,這樣所有NSLog的列印就都同時列印在LLDB上和VKDebugConsole上了
支援了 紅(出錯) 黃(console.log) 白(系統NSlog)三種顏色
開啟控制檯後,程式再次輸出的NSLog也能進入控制檯區域方便檢視
編譯控制
所有的程式碼在debug模式下會生效,在release模式下會自動不參與編譯,直接失效,不用擔心發版前忘記關掉程式碼,導致線上暴露的問題
支援NSError
程式碼中有個外掛hook了 NSError的兩個構造方法initWithDomainXXX
和errorWithDomainXXX
,會在每一次構建NSError的時候,向控制檯打一行紅色的log輸出日誌,效果同NSLog一樣
TODO LIST:
- 高優:支援網路日誌,所有的網路請求介面以及返回資料,會以網路日誌的方式,在console裡面查詢
- 高優:介面更好看點吧,至少整理下控制檯輸出介面,可讀性太差,可能會對輸出模組進行大的改版,整理和控制隨時調整,不同性質的log的展示和隱藏
- 指令更易輸入,能支援輸入oc的方括號語法
- 擴充套件更多地方便除錯的介面和指令
- ......