VKDebugConsole App黑盒控制檯

折騰範兒_味精發表於2019-02-20

遷移老文章到掘金

簡介

App內控制檯,可以在脫離Xcode debug的情況下,除錯記憶體,列印資料,修改UI等

方便在黑盒測試+內部體驗的環境下,發現Bug後,直接在Bug現場除錯記憶體,分析問題

先大體看一下GIF動畫如何使用

git

Git地址 VKDebugConsole

恩 基於JSPatch做的 ╮(╯_╰)╭

吐槽:介面好難看。。NSLog很多的時候有點亂。。

基本上初步的功能都補全了,能在自己專案裡用上了,還算方便

後續優化指令,優化功能,優化介面,還需要持續進行(眼下這個看著太難看,指令也太難用了)

基本使用

  • [VKDebugConsole showBt]方法會在window上增加一個debug按鈕
  • 點一下會變成select狀態,觸控螢幕中任何view可以選擇一個target
  • 選擇target後,console控制檯開啟,按鈕變為Hidden
  • 上部分為輸入區,輸入除錯程式碼
  • 下部分為輸出區,輸出除錯資訊,NSLog資訊,除錯錯誤(未來還會擴充套件其他
  • 再次點選Hidden按鈕會退出控制檯

除錯程式碼

因為是基於JSPatch的,所有JSPatch的語法規則這裡都一模一樣可以使用,可以參考一下動畫中的用法,不過大部分用法還是遵從JSPatch,戳這裡看如何使用 JSPatch語法

除了JSPatch支援的基本語法,還支援如下幾條命令

  • target():獲取剛才通過手選的介面View
  • targetVC()獲取剛才通過手選的介面View所在的VC
  • getParentVC(v)輸入一個View,獲取所在的VC
  • print(item)輸出一個物件到控制檯,單獨處理了Label和View的描述資訊,更加方便直觀(可以擴充套件更多單獨處理的物件型別)
  • changeSelect()重新手選獲取新target
  • exit()退出控制檯
  • 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的兩個構造方法initWithDomainXXXerrorWithDomainXXX,會在每一次構建NSError的時候,向控制檯打一行紅色的log輸出日誌,效果同NSLog一樣

TODO LIST:

  • 高優:支援網路日誌,所有的網路請求介面以及返回資料,會以網路日誌的方式,在console裡面查詢
  • 高優:介面更好看點吧,至少整理下控制檯輸出介面,可讀性太差,可能會對輸出模組進行大的改版,整理和控制隨時調整,不同性質的log的展示和隱藏
  • 指令更易輸入,能支援輸入oc的方括號語法
  • 擴充套件更多地方便除錯的介面和指令
  • ……

相關文章