Xcode動態除錯原理

小星星_ios發表於2020-03-19

Xcode動態除錯原理

lldb除錯

  • 關於GCC、LLVM、GDB、LLDB

    • GCC -> LLVM: 編譯器
    • GDB -> LLDB: 偵錯程式
  • debugserver 一開始存放在 Mac 的 Xcode 裡面

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.1/DeveloperDiskImage.dmg/usr/bin/debugserver
複製程式碼
  • 當Xcode識別到手機裝置時,Xcode 會自動將 debugserver 安裝到 iPhone 上
// 越獄之後通過這個路徑就能看到
/Developer/usr/bin/debugserver
複製程式碼
  • Xcode除錯的侷限性
    • 一般情況下,只能除錯通過 Xcode 安裝的 App

動態除錯任意 App

原理:把本來通過Xcode中內建的 llbd,換成終端中的 lldb。 預設情況下,debugserver 沒有許可權去除錯非 Xcode 安裝的 App, 所以需要重新簽名,簽上2個除錯相關的許可權

get-task-allow
task_for_pid-allow
複製程式碼
  1. 將 debugserver 拷貝到電腦上進行重簽名
ldid -e debugserver > debugserver.entitlements
複製程式碼
  1. 為 debugserver.entitlements 增加許可權
ldid -Sdebugserver.entitlements debugserver
複製程式碼

3.把重新簽名的 debugserver 放到手機的 /usr/bin 目錄中,然後修改一下許可權

chmod +x debugserver
複製程式碼

4.debugserver 連線 app

debugserver *:10011 -a WeChat
複製程式碼

5.把本地的埠和遠端的埠對映起來,然後利用終端連線 debugserver

lldb
(lldb)process connect connect://localhost:10011
複製程式碼

6.Failed to get connection from a remote gdb process,說明這個埠被用了

killall -9 debugserver
複製程式碼

相關文章