通过lldb远程调试iOS App

来源:互联网 发布:bad air sponge 知乎 编辑:程序博客网 时间:2024/05/21 23:00

在了解LLDB的用法之前,需要对LLDB的一个大Bug有所了解:Xcode 6所附带的LLDB(版本号320.x.xx)在armv7和armv7s设备上有时会混淆ARM和THUMB指令,根本无法调试,且在本书截稿之时,此Bug仍未得到修复。一个暂时的解决方案是从
https://developer.apple.com/downloads/index.action下载安装Xcode 5.0.1或Xcode 5.0.2,它们所附带的LLDB(版本号300.x.xx)可以正常调试armv7和armv7s设备。在安装旧版Xcode的时候,注意将其安装在与当前Xcode不同的路径下,如/Applications/OldXcode.app,这样就不会影响当前的Xcode了。


通过lldb远程调试iOS App

苹果从Xcode5开始弃用了gcc及gdb, 只能使用llvm用lldb。

在越狱机上虽然仍然可以使用gdb进行调试,但lldb是趋势。下面就介绍一种通过Wifi或者USB,在Mac上使用lldb对iOS App进行调试的方法。(仅限越狱机)

1. 在你的Mac上运行下面的命令,装载(mount) Xcode的develop kisk image

 
hdiutil attach /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/ DeviceSupport/7.0.3\ \(11B508\)/DeveloperDiskImage.dmg


2. 拷贝debugserver到某个临时文件夹(我拷贝到Desktop)


cp /Volumes/DeveloperDiskImage /usr/bin/debugserver .

 

3.用Xcode创建一个名为entitlements.plist的plist文件。包含以下3个key value键值对:

  Key                         Value

com.apple.springboard.debugapplications      truerun-unsigned-code                    trueget-task-allow                      truetask_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. 签名


codesign -s - --entitlements entitlements.plist -f debugserver

 注也可以采用ldid形式,但有可能卡住

/opt/theos/bin/ldid -Sent.xml debugserver

注意,“-S”选项与“ent.xml”之间是没有空格的。

ent.xml

<!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>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
    </dict>
</plist>


5.  拷贝debugserver到越狱iOS设备

scp debugserver root@192.168.1.106:~

 

6. 通过以下命令查看你要调试的程序的进程ID

ps aux | grep "YouTube"

 

7. 通过ssh登录到iOS设备,运行以下命令

./debugserver *:1234 -a "YouTube"

 

8. 在Mac终端运行lldb命令后,输入以下2条命令:

1
2
platform select remote-ios
process connect connect://192.168.2.104:1234

 

通过wifi调试很慢,有时候"process connect"命令甚至会失败。如果你也遇到这样的情况,你可以通过USB而不是Wifi进行调试。

1. 首先在你的Mac上下载usbmuxd解压,并运行:

1
2
3
4
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命令就可以更改如下:

process connect connect://localhost:1234

 

然后你就可以像在Xcode中一样用lldb调试了。

 

Ref:  

http://iphonedevwiki.net/index.php/Debugserver 


http://www.kanxue.com/bbs/showthread.php?p=1303343,有提到ARMDisassembler.framework

xcode 5.1.1的版本为例。
找到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.1 (11D167)/DeveloperDiskImage.dmg

Click image for larger versionName:2.jpgViews:8Size:896 KBID:90974

 将ARMDisassembler.framework 拷贝到手机上/System/Library/PrivateFrameworks目录下。
很多人一定奇怪为啥要这步骤,你们可以自己试试,去掉ARMDisassembler.framework与存在ARMDisassembler.framework,在LLDB调试的过程看ARM反汇编的质量和效果。


lldb调试命令简介

iPhone端
lldb调试-启动进程
debugserver -x backboard IP:port /path/to/executable
lldb调试-附加进程
debugserver IP:port -a "ProcessName"


Mac端
"D:\Program Files (x86)\usbmuxd-1.0.8\python-client\tcprelay.py" -t 1234:1234
lldb
process connect connect://127.0.0.1:1234
image list -o -f
bt
bt all
ni
si


b l
b function
br s –a address
br s –a 'ASLROffset+address'
br s -r Regex
br dis
br en
br del
指定在某个断点得到触发的时候,执行预先设置的指令 
br com add 1
Enter your debugger command(s). Type 'DONE' to end.
> po [$r0 class]
> p (char *)$r1
> c
> DONE


p (char *)$r1
用“x”命令打印一个地址处存放的值
register write r0 1



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身份证刷不了磁怎么办 身份证不能刷了怎么办 身份证指纹错了怎么办 指纹手机丢了怎么办 异地办理临时身份证怎么办 杭州办理外地身份证怎么办 办理身份证没有户口本怎么办 2018身份证掉了怎么办 双户口注销社保怎么办 常用户口被注销怎么办 刚到厦门怎么办身份证 新疆身份证丢了怎么办 技能证书丢了怎么办 16岁拍身份证怎么办 16岁以下怎么办身份证 办身份证要证明怎么办 15岁怎么办银行卡淘宝 满16岁怎么办银行卡 电脑最小化后不见了怎么办 满16周岁怎么办银行卡 给儿童办身份证怎么办 当兵前身份证号码不符怎么办 身份证后六位密码x怎么办 借了贷款人死了怎么办 贷款实在还不起怎么办 个人贷款还不起怎么办 珠海派出所办事不公平怎么办 改身份证后学籍怎么办? 威海身份证丢了怎么办 车牌轻微变形了怎么办 车牌照丢一个怎么办 小车车牌掉了怎么办 车牌撞变形了怎么办 车牌烂了一块怎么办 机动车牌照丢了怎么办 汽车想换车牌怎么办 机动车前牌照丢失怎么办 汽车后牌照丢失怎么办 机动车扣分超证怎么办 联通香港无服务怎么办 长乐改区 闽侯怎么办