debugserver + lldb 动态调试
配置debugserver
debugserver运行在的iOS上,顾名思义,它作为服务端,实际执行LLDB(作为客户端)传过来的命令,再把执行结果反馈给LLDB,显示给用户,即所谓的“远程调试”。在默认情况下,iOS设备上并没有安装debugserver,只有在设备连接过一次的Xcode,并在窗口→设备菜单中添加此设备后,debugserver才会被Xcode中安装到iOS版的“/开发人员的/ usr / bin中/”目录下。
将debugserver从手机传到mac
使用iproxy工具,将当前连接设备的22端口(SSH)映射到电脑的2222端口
1 | iproxy 2222 22 |
SSH到usb设备上
1 | ssh -p2222 root@127.0.0.1 |
传输文件
1 | scp -P2222 root@127.0.0.1:/Developer/usr/bin/debugserver ~/Desktop |
给debugserver瘦身
对照表格找到设备的ARM信息
例如iphone为5c,执行
1 | lipo -thin armv7s ~/debugserver -output ~/debugserver |
给debugserver添加权限
安装ldid
1 | brew install ldid |
下载ent.xml到MACOS目录,然后运行:
1 | ldid -Sent.xml debugserver |
注意“-S”选项与“Sent.xml”之间是没有空格的,Sent.xml是设置二进制授权的文件,没有的话可以去网上找找,也可在工程中找entitlements文件获得。
将经过处理的debugserver拷回手机
1 | scp -P2222 ~/debugserver root@127.0.0.1:/usr/bin/debugserver |
连接进程
通过端口号调试
ssh到ios上,执行
1 | ps aux |
查看pid
1 | debugserver *:1234 -a prossesname/pid |
文件方式启动,不需端口号
1 | debugserver -x frontboard *:1234 /var/containers/Bundle/Application/1452A4F7-C5B1-4654-9CDC-4D94C3C94F47/MTPotal.app |
把本地端口映射到苹果端口
1 | iproxy 1234 1234 |
在Mac系统上用LLDB远程调试
1 | process connect connect://localhost:1234 |
这条命令执行耗时比较长,需要耐心等一会
常用lldb命令
1 | #查看地址 |
更多命令查看手册
参考链接
http://iosre.com/t/debugserver-lldb-gdb/65
http://zhz.io/2018/07/05/%E9%82%A3%E4%B8%AALLDB%E4%BD%A0%E7%9C%9F%E7%9A%84%E4%BA%86%E8%A7%A3%E5%90%97/