配置debugserver
默认情况下iOS上并没有安装debugserver,因此需要设备链接一次Xcode,并在Window->Devices菜单中增加此设备后。会被安装到IOS的Developer/usr/bin/目录下。
- 瘦身
接下来我们将当前设备进行从IOS拷贝到我们的mac系统上,进行对debugserver进行瘦身
lipo -thin armv7s ~/debugserver -output ~/debugserver
注意:这里的armv7s
换成对应设备的arm
- 加task_for_pid权限
ent.plist下载到你对应存档debugserver的目录下。
codesign -s - --entitlements ent.plist -f debugserver
- 将处理过后的debugserver放到ios的/usr/bin/debugserver
//附加权限
chmod +x /usr/bin/debugserver
- 启动debugserver 附加到进程
debugserver -x backboard IP:poart /path/to/executable //启动executable,并开启port端口,等待来自IP的LLDB接入
debugserver IP:poart -a "ProcessName" //debugserver会附加ProcessName,并开启poart端口,等待来自IP的接入LLDB
注意: IP设置*
代表所有IP可接入
LLDB的使用说明
sudo xcode-select -s /Applications/Xcode6.1.app //进行切换默认编译的xcode 此处Xcode6.为我放在Applications目录下的
首先我们需要启动lldb执行如下命令:
/Applications/Xcode6.1.app/Contents/Developer/usr/bin/lldb
启动LLDB之后,我们就需要链接等待我们接入的debugserver。命令如下
process connect connect://iOSIP:1234
- image list
列举当前进程中的所有模块
image list -o -f
- breakpoint
进行设置中断点:
b function
或
br s -a adress
或
br s -a 'ASLROffset+address'
- print
用来打印 断电停止时内部发生的某处值。
p $r6
查看后 对应地址的内容将被置0 ,因此调用ni
则再次查看r6值变为0
po [$ro class]
po $ro
其中po
用来打印Objective-C对象
p (char*)$r1 //通过强制转换的方式打印C语言基本数据类型。
可以使用x命令打印一个地址存放的值。如下:
p/x $sp //以十六进制方式打印sp,它是一个指针
x/10 $sp //打印出这个指针指向的连续10个
x/10 0x006d333c