扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章给大家分享的是有关iOS中怎么实现动态调试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联公司主营广信网站建设的网络公司,主营网站建设方案,App定制开发,广信h5成都小程序开发搭建,广信网站营销推广欢迎广信等地区企业咨询Xcode的动态调试原理
首先了解一下 Xcode 编译和调试器的发展。Xcode 中的编译器发展历程:GCC -> LLVM,调试器的发展历程:GDB -> LLDB 。
Xcode 调试安装到手机上的应用的原理:Xcode 通过 LLDB 调试器把调试指令发送到手机上的 debugserver, debugserver 再与相应的 APP 进行交互,达到调试的效果。
debugserver 一开始是存放在Mac的Xcode里面,路径:
/Applications/Xcode.app/Contents/Developer/Platforms /iPhoneOS.platform/DeviceSupport /9.1/DeveloperDiskImage.dmg /usr/bin/debugserver
当 Xcode 识别到手机设备时,Xcode 会自动将 debugserver 安装到手机上。
Xcode 调试的局限性:一般情况下,只能调试通过 Xcode 安装的APP,无法调试其它APP。
给debugserver赋予权限
默认情况下 /Developer/usr/bin/debugserver 缺少一定的权限,只能调试通过Xcode安装的App,如果希望调试其它App,需要对 debugserver 重新签名,签上可以调试其它App的权限。
需要的两个权限为:get-task-allow 和 task_for_pid-allow
iPhone上的 /Developer 目录是只读的,无法直接对 /Developer/usr/bin/debugserver 文件签名,需要先把 debugserver 复制到Mac。
通过 ldid 命令导出文件以前的签名权限:
$ ldid -e debugserver > debugserver.entitlements
debugserver.entitlements 这个文件其实是个 plist 文件,在这个文件中加上上面提到的两个权限后,再通过 ldid 命令对文件重新签名。
$ ldid -Sdebugserver.entitlements debugserver
然后将已经签好权限的 debugserver 放到 /usr/bin 目录,便于找到 debugserver 指令。
debugserver附加到某个APP进程
$ debugserver *:端口号 -a 进程
*:端口号:使用iPhone的某个端口启动debugserver服务(不是保留端口)
-a进程:输入APP的进程信息(进程ID或者进程名称)
Mac远程连接iPhone上的debugserver服务
启动LLDB:
// 在终端输入 $ lldb
连接debugserver服务
(lldb) process connect connect://手机IP地址:debugserver服务端口号
使用LLDB的c命令让程序先继续运行
(lldb) c
到此,就可以远程调试别人的App了。
常用的LLDB指令
给ViewController的test方法设置断点
breakpoint set -n "-[ViewController test]"
查看指令用户使用 help 指令: help breakpoint 等。
打印线程的堆栈信息: thread backtrace
很多命令不在这里赘述,请参考:http://lldb.llvm.org/lldb-gdb.html
ASLR
获取 ASLR 的偏移量:
image list -o -f
打印结果的第二列前面的地址就是我们需要的 ASLR 的偏移量offset。
假如我们想给某个类中的test方法添加断点,那么通过 Hooper 工具找到该方法的第一个内存地址,假如为0x010101,然后地址加上我们得到的 ASLR 的偏移量就是该方法的实际地址。然后通过该地址给方法下断点。
breakpoint set -o 0x010101+offset
以上就是iOS中怎么实现动态调试,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联网站建设公司行业资讯频道。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流