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的可执行文件路径