iOS 动态真机调试原理

前言

说起动态调试,大家普遍第一反应是通过Xcode 安装应用到真机,然后通过添加断点,添加打印等方式来动态的调试程序所遇到的bug或者异常,今天和大家分享一下这个过程的底层原理,希望对动态调试有更深入的了解。

动态调试原理图

首先我们回顾一下真机调试的过程,

1.打开Xcode

2.通过数据线连接真机和mac

3.在需要的地方添加断点

4.点击Xcode中的run将程序运行到真机上

通过以上的操作我们就与手机建立了一个动态调试的环境,如上图,当我们下发lldb 指令传输给手机的debugserver, debugserver通过监听App运行进程下发指令给App,这时候App 执行了某种操作将结果返回给debugserver,debugserver再将结果告诉给lldb,lldb则会输出结果。

示例

例如我们在viewController 中添加 touches 方法,当点击屏幕,就会进入到Xcode中lldb 环境,我们在控制台输入指令 po self会得到以下结果
lldb

这样一个过程则是我们上述我们描述的动态的原理中所执行的操作。

上述过程大家可能看图就能很好的理解,可能唯一疑惑的是这个debugserver 是什么东西?

首先我们在以下的路径中找打它:

Xcode/Contents/Deverloper/Platforms/iPhoneOS.platform/DeviceSupport/9.1(任何系统版本都可以)/DeveloperDiskImage.dmg

双击 DeveloperDiskImage.dmg 在 /usr/bin/debugserver
我们可以看到它,它到是什么,我们可以查看一下,利用file 指令

file debugserver

输出结果

debugserver: Mach-O universal binary with 3 architectures: [arm_v7:Mach-O executable arm_v7] [arm64]
debugserver (for architecture armv7):   Mach-O executable arm_v7
debugserver (for architecture armv7s):  Mach-O executable arm_v7s
debugserver (for architecture arm64):   Mach-O 64-bit executable arm64

这下我们应该可以明白了,它是一个Mach-O格式的通用二进制的可执行文件,包含三种指令集架构.

当我们执行真机调试时候,这个文件会被安装到我们手机中,具体目录我们可以通过越狱手机(个人系统9.1)文件系统管理工具iFunBox查看


/Developer/usr/bin/debugserver

这也就能解释我们第一次真机调试运行缓慢,当然还存在其他原因,这里就不展开分析了。

那么至此全文原理性东西已经解释完毕了,接下来我们可以通过逆向的一些知识,我们手动的实现这个过程,我们说主要的过程

步骤一

首先需要架设一个端口,负责lldb 和 debugserver 之间的指令传输,我们可以使用一个开源的python端口转发脚本实现这一过程,
https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz 可以通过这个地址下载解压
然后执行

cd ~/Documents/usbmuxd-1.0.8/python-client
python tcprelay.py -t 10011:10011

这样我们就相当于通过访问本地10011端口就可以访问远程的10011端口。

步骤二

我们将debugserver文件重签权限后放入到 /usr/bin 目录下,然后给它赋予可执行权限 chmod +x /usr/bin/debugserver,执行

debugserver *:10011 -a process_name(这里是进程名)

步骤三

在终端在 输入lldb,进入lldb环境

 process connect://localhost:10011

这样我们一个类似Xcode的lldb调试环境就搭建好了,我们可以通过lldb 指令去调试我们想要调试的程序。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容