苹果从Xcode5开始弃用了gcc及gdb, 只能使用llvm用lldb。
在越狱机上虽然仍然可以使用gdb进行调试,但lldb是趋势。下面就介绍一种通过Wifi或者USB,在Mac上使用lldb对iOS App进行调试的方法。(仅限越狱机)
1. 在你的Mac上运行下面的命令,装载(mount) Xcode的develop kisk image
1
2
|
<strong>hdiutil attach /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/ DeviceSupport/7.0.3\ \(11B508\)/DeveloperDiskImage.dmg </strong> |
2. 拷贝debugserver到某个临时文件夹(我拷贝到Desktop)
1
2
|
<strong>cp /Volumes/DeveloperDiskImage/usr/bin/debugserver . </strong> |
3.用Xcode创建一个名为entitlements.plist的plist文件。包含以下3个key value键值对:
Key Value
com.apple.springboard.debugapplications true
run-unsigned-code true
get-task-allow true
task_for_pid-allow true
用TextEdit打开内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version= "1.0"
encoding= "UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version= "1.0" >
<dict> <key>com.apple.springboard.debugapplications</key>
< true />
<key>run-unsigned-code</key>
< true />
<key> get -task-allow</key>
< true />
<key>task_for_pid-allow</key>
< true />
</dict> </plist> |
4.
1
2
|
<strong>codesign -s - --entitlements entitlements.plist -f debugserver </strong> |
5. 拷贝debugserver到越狱iOS设备
1
2
|
<strong>scp debugserver root@192.168.1.106:~ </strong> |
6. 通过以下命令查看你要调试的程序的进程ID
1
2
|
<strong>ps aux | grep "YouTube"
</strong> |
7. 通过ssh登录到iOS设备,运行以下命令
1
2
|
<strong>./debugserver *:1234 -a "YouTube"
</strong> |
8. 在Mac终端运行lldb命令后,输入以下2条命令:
1
2
3
|
<strong>platform select
remote-ios
process connect connect: //192.168.2.104:1234
</strong> |
通过wifi调试很慢,有时候"process connect"命令甚至会失败。如果你也遇到这样的情况,你可以通过USB而不是Wifi进行调试。
1. 首先在你的Mac上下载usbmuxd解压,并运行:
1
2
|
wget http: //cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.bz2
tar xjfv usbmuxd-1.0.8.tar.bz2 |
cd usbmuxd-1.0.8/python-client/ python tcprelay.py -t 1234:1234
2. 这样所有试图链接到localhost:1234的连接都会通过USB被重定向到你的iOS设备的1234端口
这样,上面第8步中的process connect命令就可以更改如下:
1
2
|
<strong>process connect connect: //localhost:1234
</strong> |
然后你就可以像在Xcode中一样用lldb调试了。
Ref:
http://iphonedevwiki.net/index.php/Debugserver