动态调试

作者: 风雨彩虹_123 | 来源:发表于2021-07-03 14:51 被阅读0次

    Xcode动态调试原理

    动态调试就是将程序运行起来,通过下断点、打印等方式查看参数、返回值、函数调用流程等。

    Xcode的调试器发展历程:GDB -> LLDB ,LLDB 是基于GDB开发的。

    动态调试原理

    debugserver 是配合LLDB做动态调试必不可少的程序,必须将debugserver放入到手机中才能起作用。当Xcode识别到手机设备时,Xcode会自动将debugserver安装到iphone上 /Developer/usr/bin/debugserver ,该bin目录下的文件是只读的,不能修改。

    debugserver在iPhone的路径

    Xcode真机调试流程:

    1.Xcode打开项目;

    2.通过数据线链接手机;

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

    4.点击run,将程序跑到手机上;

    Xcode会自动将LLDB连接到手机上的debugserver上,debugserver也会与当前运行程序建立链接。
    LLDB下发指令传输到手机上的debugserver,debugserver通过监听APP运行进程下发指令,APP执行了命令后将结果返回debugserver,debugserver再传输给LLDB,最总有LLDB将结果打印在控制台上。

    Xcode动态调试的局限性:只能调试通过Xcode安装的APP。

    动态调试任意APP

    动态调试任意APP原理

    1.制作调试任意APP的debugserver,Xcode帮我们自动生成的只能调试Xcode运行的APP,不能调试其他的APP。将手机/Developer/usr/bin/中的debugserver拷贝到桌面。

    2.对debugserver进行权限签名,需要添加能够调试任意APP的权限。

    3.使用ldid 导出debugserver的权限文件并添加权限。

    ldid -e debugserver > debugserver.entitlements
    //将下面2个权限添加到debugserver.entitlements中
    get-task-allow   : YES
    task_for_pid-allow    :   YES 
    
    

    4.使用ldid 进行对添加的权限签名,然后将签名后的debugserver拷贝到手机的/usr/bin目录下

    ldid -Sdebugserver.entitlements debugserver
    

    5.debugserver 监听微信APP 进程
    debugserver *:10011 -a WeChat

    6.连接debugserver服务

    (lldb) process connect connect://手机IP地址:debugserver服务端口号
    # 使用Python 脚本去映射
    # 这里用的是手机的10011端口映射电脑的10011端口, 这样就可以直接使用电脑的10011端口了
    process connect connect://localhost:10011
    

    相关文章

      网友评论

        本文标题:动态调试

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