美文网首页iOS基础
Xcode动态调试原理

Xcode动态调试原理

作者: ziyouzhe4 | 来源:发表于2018-04-04 20:21 被阅读105次
    Xcode调试原理.png

    当Xcode识别手机设备时, Xcode会自动将 debugserver 安装到 iPhone上

    Xcode创建一个项目调试app时候,中间介质是这个debugserver, lldb命令传给debugserver,debugserver将命令转给app,app将反馈信息给debugserver debugserver将返回给lldb

    <举个粟子>:
    创建一个 testApp, 运行到iOS8.1的越狱手机上

    debugserver目录位置是:
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/De viceSupport/8.1/DeveloperDiskImage.dmg
    双击DeveloperDiskImage.dmg  下面的 /usr/bin/debugserver 目录中找到debugserver
    

    默认情况下 /Developer/usr/bin/debugserver 缺少一定权限Xcode,只能调试通过Xcode安装的app,无法调试其它app (来自 App Store的app) 这时候需要动态调试app

    动态调试原理.png

    如果希望调试其它app,需要对debugserver重新签名, 签上2个权限

    • get-task-allow
    • task_for_pid-allow
    当然你也可以将SpringBoard的权限导出 给debugserver
    // 将debugserver拷贝到桌面,导出他的权限步骤
    1. ldid -e debugserver > debugserver.entitlementns  // 导出debugserver权限
    2. 给debugserver 添加 get-task-allow  和  task_for_pid-allow  权限
    3. ldid -Sdebugserver.entitlementns  debugserver // 将新的权限赋值给debugserver
    
    将重新签好权限的debugserver 放到手机 /usr/bin 目录,便于找到debugserver 指令(可以在命令行敲出...)
    将debugserver 放到 usr/bin 下面后 还是不能正常使用 ,做如下操作:
    

    给debugserver 添加执行权限 ,就可以了!

    image.png

    debugserver附加到某个APP进程:

    <debugserver *:端口号 -a 进程名字>
    <通过USB来调试app, 如果这样的话 需要更改 usb.sh 文件>

    *:端口号 使用 iPhone的某个端口启动debugserver
    服务(不是系统和已经使用的端口就可以)

    -a 进程 输入app的进程信息(进程ID或者名称)

    启动 LLDB : 命令行输入lldb


    image.png
    usb.png image.png

    监听成功:


    image.png image.png

    终端已经成功监听后 手机卡住 点击按钮无反应
    输入 c 停止 卡住状态 如下图:

    image.png 启动LLDB流程图.png

    相关文章

      网友评论

        本文标题:Xcode动态调试原理

        本文链接:https://www.haomeiwen.com/subject/pyelhftx.html