Xcode动态调试原理

1,380 阅读1分钟

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