Xcode的动态调试任意的APP

Xcode的动态调试原理

  • debugServer 一直存放在Xcode的文件夹里
  • 当Xcode识别到手机后,Xcode自动将debugServer安装在手机上的 Developer/usr/bin目录下;
  • Mac上,Xcode通过 LLDB 跟手机上的 debugServer 连接来达到动态调试的目的;

怎么动态调试所有的APP呢?

  • 获取文件的权限列表:
    ldid -e debugserver > debugserver.entitlements
  • 给debugserver签上权限
    添加get-task-allow task_for_pid-allow 这两个bool = YES属性到 debugserver.entitlements 文件;
  • 通过 ldid 命令重新签名
    ldid -Sdebugserver.entitlements debugserver
  • 将已经签好权限的debugserver放到 /usr/bin 目录

关于权限的签名,也可以使用codesign

查看权限信息

$ codesign -d --entitlements - debugserver

签名权限

$ codesign -f -s - --entitlements debugserver.entitlements debugserver

或者简写为

$ codesign -fs- --entitlements debugserver.entitlements debugserver

  • 让debugserver附加到某个APP进程

debugserver *:端口号 -a 进程

  • 端口号:
    使用iPhone的某个未占用的端口启动debugserver服务
  • 进程
    输入APP的进程信息,进程ID或进程名称

在MAC上启动LLDB,远程连接iPhone上的debugserver服务

  • 启动LLDB

lldb

  • 连接debugserver服务

(lldb) process connect connect://手机IP地址:debugserver端口号

  • 使用LLDB的c命令让程序继续运行

(lldb) c

使用LLDB命令调试APP

  • 通过debugserver启动APP

debugserver -x auto *:端口号 app的可执行文件路径

你可能感兴趣的:(Xcode的动态调试任意的APP)