Swift之LLDB 高階除錯

語言: CN / TW / HK

iOS 開發除錯過程中, 每次改完程式碼之後, 都需要重新 run 起來才能看到效果, 所以非常麻煩且耗費時間, 本來開發時間就緊張, 所以我們要想盡一切辦法來節省時間, 提高開發效率.

之前都是在 OC 專案中用一些高階除錯, 網上文章也比較多, 在swift專案中也是試了好多次, 找了好多資料才找到的, 特意做個記錄, 所以今天只談與 swift 緊密相關的操作, 當然也很簡單, 至於 LLDB 其他的高階除錯技巧, 大家可自行上網搜一下, 後邊會再做記錄, 還請多多關注😄.

場景 和 程式碼

view 上有一個 label, 初始背景色為紅色, 在除錯過程中需要把背景色改為藍色, 但是我又不想重新 run 專案, 此處只是模擬一個場景, 實際開發中可能不會去改顏色, 但是也不排除, 比如看別人的程式碼, 改個顏色來確認是不是要找的檢視. 程式碼如下圖, 比較簡單就直接放了一張圖. 我們在 touchesBegan 中打上斷點.

image.png

除錯過程

1. 檢視label的記憶體地址並記錄

  • 點選view debug按鈕, 現在背景色是紅色, 按下圖所示找到label的記憶體地址並記錄下來0x104c124a0, 後邊要用到.

image.png

2. 觸發斷點, 修改背景色

  • 放開上一步的 view debug 模式, 點選螢幕, 觸發斷點,然後在控制檯依次輸入下圖中的命令.

    1. expression let $myLb = unsafeBitCast(0x104c124a0, to:UILabel.self) 自定義變數拿到label.
    2. expression $myLb.backgroundColor = .blue 將顏色改為藍色
    3. 放開斷點

    (lldb) expression let $myLb = unsafeBitCast(0x104c124a0, to:UILabel.self) (lldb) expression $myLb.backgroundColor = .blue () $R1 = {} (lldb) c

    注意: $myLb 前邊的$ 符一定要有 ,這裡 LLDB 自定義變數的規則.

    image.png

3. 檢視修改結果

  • 我直接用 view debug 按鈕給大家看執行後的結果了, 沒有用手機截圖. image.png