默认情况下,iOS上并没有安装debugserver,只有在设备连接过一次Xcode,并在window->Deveice菜单中添加此设备后,debugserver才会被Xcode安装到iOS的“/Develope/usr/bin”目录下。
但是,因为缺少task_for_pid权限,通过Xcode安装的debugserver只能调试我们自己的App。
配置debugserver
将未经处理的debugserver从iOS拷贝到OSX中的"/Users/DPP"目录下,命令如下:
$scp root@iOSIP:/Developer/usr/bin/debugserver ~/debugserver
帮助debugserver减肥命令如下:
$lipo -thin armv7 ~/debugserver -output ~/debugserver
// 注意将armv7改成自己设备所对应的ARM
给debugserver添加task_for_pid权限
拷贝如下代码,保存成ent.xml,放到OSX的"/Users/DPP"目录下
<plist version="1.0">
<dict>
<key>com.apple.springboard.debugapplications</key>
<true/>
<key>get-task-allow</key>
<true/>
<key>task_for_pid-allow</key>
<true/>
<key>run-unsigned-code</key>
<true/>
</dict>
</plist>
运行如下代码:
$/opt/theos/bin/ldid -Sent debugserver
“-S”与”ent.xml“之间是没有空格的。
将经过处理的debugserver拷回iOS
$scp ~/debugserver root@iOSIP:/usr/bin/debugserver
$ssh root@iOSIP
~ root# chmod +x /usr/bin/debugserver
痛debugserver启动或附加进程
debugserver最常用的两种场景分别是
debugserver -x backboard IP:port /path/to/executable
debugserver会启动excutable,并开启port端口,等待来自IP的LLDB接入。
debugserver IP:port -a "ProcessName"
debugserver会附加ProcessName,并开启port端口,等待来自IP的LLDB接入。
例如:
~ root# debugserver -x backboard *:1234 /Applications/MobileSMS.app/MobileSMS
上面的代码会启动MobileSMS,并开启1234端口,等待任意IP地址的LLDB接入。
而如下代码:
~root# debugserver 192.168.1.6:1234 -a "MobileSMS"
会附加MobileSMS,并开启1234端口,等待来自192.168.1.6的LLDB接入。