debugserver + lldb环境搭建

作者: 胡小夜大叔 | 来源:发表于2016-09-06 17:37 被阅读1987次
    1. 重签debugserver
      找到你Xcode的位置,右键打开包内容,然后按如下路径找到和你手机系统对应的DeveloperDiskImage.dmg


      D6A64ABA-54CE-40B6-BBC7-55A5FBEB5B8D.png

      打开DeveloperDiskImage.dmg,找到/usr/bin/debugserver


      9348A0BC-E590-4AEE-BDBD-5EDC0CC168F9.png
      拷贝一份debugserver到桌面上,之后我们就对桌面上的做操作
      cp /Volumes/DeveloperDiskImage/usr/bin/debugserver ~/Desktop/debugserver
      想让debugserver成功跑起来要做两件事
    • 给debugserver瘦身
      瘦身要把debugserver瘦成和我们设备相同arm指令集的对应类型,可参照下图

      5b386d533f_517x500.png
      然后执行命令
      lipo -thin arm64 ~/Desktop/debugserver -output ~/Desktop/debugserver
      记得这里的arm64换成你设备对应的指令集类型。
      ps:今天试的时候发现,其实不瘦身也可以。于是查了下论坛,狗剩大神如是说:
      B8B07E10-0B35-40F7-9517-3E4C8ACBEB46.png
    • 给debugserver添加task_for_pid权限
      只有打了task_for_pid权限我们才可以在后来以进程为单位调试我们要调试的App。
      这里涉及签名工具ldid,如果你还没有安装过ldid工具,请到这里下载,这是来自joedj的,之前用的忘了哪下的ldid,今天用的时候,一直签名有问题,导致我花了好长时间去解那些乱七八糟的问题,后来换了这个地址的ldid就直接ok了,真是日了狗了。
      我们可以先查看下,原始的debugserver的签名属性:
      ldid -e ~/Desktop/debugserver

      9E9A9800-9405-493F-9032-65CF6FDD178A.png
      如果你这要是有乱码什么的显示,就说明你的ldid有问题,这是原始debugserver的属性列表。
      我们要新建一个entitlement.plist文件,内容为以下内容:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>com.apple.springboard.debugapplications</key>
      <true/>
      <key>run-unsigned-code</key>
      <true/>
      <key>get-task-allow</key>
      <true/>
      <key>task_for_pid-allow</key>
      <true/>
      </dict>
      </plist>
      用这个来替换原始的属性列表,执行命令:
      imac3deiMac:Desktop hp$ codesign -s - --entitlements entitlement.plist -f debugserver
      debugserver: replacing existing signature
      再查看一下:
      ldid -e ~/Desktop/debugserver
      702A9107-36A8-4EB7-9283-3B0480A715FA.png
      把旧的属性列表替换掉了,说明OK了。
    1. 把重签名的debugserver放到手机上
      执行命令:
      scp -p 22 debugserver root@yourPhoneIp:/usr/bin/
      之后就可以用ssh登录手机,直接使用debugserver命令了。
      如果使用失败先看下debugserver有没有可执行权限,如果没有,则给予r权限:
      chmod 777 /usr/bin/debugserver
      (PS:其实还有一种方法,如果你手机连接过xcode做过任何调试,在你手机的 /Developer/usr/bin/ 目录下会有个debugserver,你也可以把这个传到电脑上,重签名后再传回到手机上,这样的好处是不用瘦身,这个debugserver对应的指令集就是手机的指令集)
    2. 远程调试
      手机上你可以通过命令开启debugserver:
      debugserver *:1212 -a <process name>
      参数大概说一下,这里的 * 是指任何ip都可以连接这个debugserver,1212是指连接端口,你可以设置一个没有被占用的,-a 后可以跟进程id,或进程名字。debugserver的wiki
      成功的话会有类似的log:
      debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89 for arm64.
      Attaching to process WeChat...
      Listening to port 1212 for a connection from *...
      如果出现:
      error: failed to attach to process named: "" unable to start the exception thread
      请查一下签名那块的步骤,或者重新拿一个原始的重新签一下,要是觉得是ldid的问题,就换ldid。
      如果一切顺利,你手机端已经开启了debugserver。
      重新打开一个你电脑的终端,执行命令:
      imac3deiMac:Desktop hp$ lldb
      (lldb) process connect connect://yourPhoneIp:1212
      稍等一下,之后就会连接成功,然后就可以利用lldb的命令行,来调试连接的App了。lldb和GDB的对照表

    相关文章

      网友评论

      • TinXie:不執行瘦身 會出現 killed 9?
      • CGPointZero:这个错误:
        error: failed to attach to process named: "" unable to start the exception thread
        用你说的方法解决不了,我找到了解决方案:
        不要执行这一步:
        lipo -thin arm64 ~/Desktop/debugserver -output ~/Desktop/debugserver
        直接ldid瘦身即可

      本文标题:debugserver + lldb环境搭建

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