Xcode调试App原理

Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugserver安装到iPhone上。

debugserver在Xcode路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver

debugserver安装到手机路径:/Developer/usr/bin/debugserver

debugserver *:端口 -a App进程 使用iPhone的某个端口启动debugserver服务附加到某个App进程 监听LLDB指令。

Mac内置的LLDB可以远程连接iPhone上的debugserver服务发送LLDB指令

动态调试任意APP

Xcode安装到手机中的debugServer只能调试Xcode安装的App,如果需要调试任意的App需要对debugserver重新签名。

如果希望调试其他APP,需要对debugserver重新签名,签上2个调试相关的权限

  • get-task-allow
  • task_for_pid-allow

如何给debugserver签上权限

iPhone上的/Developer⽬目录是只读的,⽆无法直接对/Developer/usr/bin/debugserver⽂文件签 名,需要先把debugserver复制到Mac

通过ldid命令导出⽂文件以前的签名权限

ldid -e debugserver > debugserver.entitlements

给debugserver.plist⽂文件加上get-task-allow和task_for_pid-allow权限

通过ldid命令重新签名

ldid -Sdebugserver.entitlements debugserver

将已经签好权限的debugserver放到/usr/bin⽬目录,便便于找到debugserver指令

让debugserver附加到某个APP进程

远程连接iPhone 执行指令

debugserver *:端⼝口号 -a 进程

在Mac上启动LLDB,远程连接iPhone上的debugserver服务

启动LLDB

$ lldb
(lldb)

连接debugserver服务

(lldb) process connect connect://⼿手机IP地址:debugserver服务端⼝口号

使⽤用LLDB的c命令让程序先继续运⾏行行

(lldb) c

最新文章

  1. iOS开发系列--Swift 3.0
  2. [ES] 基础概念
  3. matlab练习程序(多边形顶点凹凸性)
  4. int main(int argc,char* argv[]) 简单理解
  5. Linux操作系统
  6. arcgis engine - 鹰眼在栅格图无法显示.
  7. Chrome退出全屏问题
  8. 护肤品总结 Skin Care (2)
  9. winsock开发重复定义问题
  10. linux学习笔记之线程同步机制
  11. mysql server advanced 5.6基于oracle linux 6.6的安装
  12. YII重点文件
  13. 调用WCF的异步方法
  14. Java之String类型详解
  15. JAVA程序员面试30问(附带答案)
  16. linux基础命令--userdel 删除用户帐户和相关文件
  17. K8s+jenkins实现提升效率 —— 一些小记录
  18. hdu 3033(好题,分组背包)
  19. Python 标准库 ConfigParser 模块 的使用
  20. 【xsy3423】党² 线段树+李超线段树or动态半平面交

热门文章

  1. 4.2.1 Vector bit-select and part-select addressing
  2. &与&&,|与||的区别
  3. BOM的构成
  4. spring mvc 配置后,web中的html页面报404,该怎么处理
  5. centos7 安装KDE
  6. redis设置自动启动
  7. shell实现批量创建交叉编译工具软链接
  8. Echart中X轴为时间坐标刻度时,后台返回时间List被强制转化为时间戳问题
  9. [转]PHP base64_encode 在URL地址参数编码上使用
  10. html中没有不能随意嵌套的标签