Xcode动态调试原理
动态调试就是将程序运行起来,通过下断点、打印等方式查看参数、返回值、函数调用流程等。
Xcode的调试器发展历程:GDB -> LLDB ,LLDB 是基于GDB开发的。
动态调试原理debugserver 是配合LLDB做动态调试必不可少的程序,必须将debugserver放入到手机中才能起作用。当Xcode识别到手机设备时,Xcode会自动将debugserver安装到iphone上 /Developer/usr/bin/debugserver ,该bin目录下的文件是只读的,不能修改。
debugserver在iPhone的路径Xcode真机调试流程:
1.Xcode打开项目;
2.通过数据线链接手机;
3.在需要的地方添加断点;
4.点击run,将程序跑到手机上;
Xcode会自动将LLDB连接到手机上的debugserver上,debugserver也会与当前运行程序建立链接。
LLDB下发指令传输到手机上的debugserver,debugserver通过监听APP运行进程下发指令,APP执行了命令后将结果返回debugserver,debugserver再传输给LLDB,最总有LLDB将结果打印在控制台上。
Xcode动态调试的局限性:只能调试通过Xcode安装的APP。
动态调试任意APP
动态调试任意APP原理1.制作调试任意APP的debugserver,Xcode帮我们自动生成的只能调试Xcode运行的APP,不能调试其他的APP。将手机/Developer/usr/bin/中的debugserver拷贝到桌面。
2.对debugserver进行权限签名,需要添加能够调试任意APP的权限。
3.使用ldid 导出debugserver的权限文件并添加权限。
ldid -e debugserver > debugserver.entitlements
//将下面2个权限添加到debugserver.entitlements中
get-task-allow : YES
task_for_pid-allow : YES
4.使用ldid 进行对添加的权限签名,然后将签名后的debugserver拷贝到手机的/usr/bin目录下
ldid -Sdebugserver.entitlements debugserver
5.debugserver 监听微信APP 进程
debugserver *:10011 -a WeChat
6.连接debugserver服务
(lldb) process connect connect://手机IP地址:debugserver服务端口号
# 使用Python 脚本去映射
# 这里用的是手机的10011端口映射电脑的10011端口, 这样就可以直接使用电脑的10011端口了
process connect connect://localhost:10011
网友评论