ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-02-22

2021-02-22 12:04:40  阅读:305  来源: 互联网

标签:02 22 ViewController APP lldb 2021 breakpoint 断点 debugserver


一、概述

debugserver、lldb是协同工作的,debugserver依附在APP上,时刻监听APP的运行状态,并有控制APP执行的能力;lldb是在APP外部的,可以和debugserver建立连接,通过debugserver获取APP运行状态,并且能通知debugserverAPP做一些事情。在真机调试的时候,Xcodedebugserver加入到APP中,通过lldb来调试APP,那么同样也可以在iterm上对越狱手机上的任意APP进行调试。

Mac(Xcode(lldb)) -> APP(debugserver)

二、debugserver位置

Xcodedebugserver的位置:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.2 如下图:

position.jpg

双击dmg查看debugserver位置:/usr/bin/debugserver如下图:

debugserver.jpg

知道debugserver的位置后,可以使用该工具scp到越狱手机上,附加到任意应用。

三、越狱手机调试环境配置

1、处理Xcode中获取手机对应版本的debugserver工具

查看描述文件:

ldid -e debugserver
  • 导出描述文件:
ldid -e debugserver > debuger.entitlements
  • 在描述文件中新增get-task-allow、task_for_pid-allow字段设置为YES

allow.jpg

使用描述文件对debugserver工具进行重签名:

ldid -Sdebuger.entitlements debugserver
  • 签名后的debugserver就可以用到越狱手机上调试了。

使用scp工具将debugserver传入到越狱手机中:

scp -r debugserver root@10.15.32.45:/usr/bin/
  • 2、越狱手机启动debugserver服务

debugserver ip:port –a app ip对应的手机ip直接使用*,port为对外开放的端口号(可以自定义)app为要附加的应用名称。

查看进程:

ps -A
  • debugserver附加到微信进程上:
debugserver *:12345 –a WeChat
  • 3、使用Mac终端启动lldb和越狱手机上的debugserver建立连接

在终端运行lldb,连接debugserver

process connect connect://127.0.01:12345
  • 这样就连接上了,可使用lldb来调试越狱手机上的应用。

注意:在手机的/Developer/usr/bin/中也存在手机对应的debugserver工具,同上我们可以将该debugserver传到电脑上,重签名后再回传到手机/usr/bin/

四、lldb常用命令

breakpoint使用

1、下断点

breakpoint set --name test1 
breakpoint set -n test1 
  • 打印:
Breakpoint 2: where = LLDB`-[ViewController test1] + 23 at ViewController.m:25:5, address = 0x0000000109de9f97
  • 断点位置信息,执行便能在该处断住。

连续下多个断点:

breakpoint set -n "-[ViewController save:]" -n "-[ViewController pause:]" -n "-[ViewController continues:]"
  • 运行c继续运行,n单步执行,s进入函数内部执行,finish执行到函数尾部。

2、查看断点列表

breakpoint list
  • 打印:
1: file = '/Users/hibo/Documents/test/LLDB/LLDB/ViewController.m', line = 21, exact_match = 0, locations = 1 Options: disabled 

 1.1: where = LLDB`-[ViewController touchesBegan:withEvent:] + 70 at ViewController.m:22:6, address = 0x0000000109de9f46, unresolved, hit count = 2 Options: disabled 

2: name = 'test1', locations = 1, resolved = 1, hit count = 7

 2.1: where = LLDB`-[ViewController test1] + 23 at ViewController.m:25:5, address = 0x0000000109de9f97, resolved, hit count = 7 

3、禁用断点

breakpoint disable  //禁用所有断点
breakpoint disable 1.1 //禁用第一个断点

4、启用断点

breakpoint enable   //启用所有断点
breakpoint enable 1.1  //启用1处断点  
  • 5、删除所有断点
breakpoint delete
breakpoint delete 1
  • 删除只能删除一组,不能单个删除

6、设置selector

breakpoint set --selector touchesBegan:withEvent:

将为所有该方法设置断点

7、设置文件中的selector断点

breakpoint set --file ViewController.m --selector touchesBegan:withEvent:

8、设置带有相同字符串的方法断点

breakpoint set -r Game:

打印:

Current breakpoints:

1: regex = 'Game:', locations = 3, resolved = 3, hit count = 0

 1.1: where = LLDB`-[ViewController pauseGame:] + 43 at ViewController.m:31:5, address = 0x00000001010dff0b, resolved, hit count = 0 

 1.2: where = LLDB`-[ViewController continueGame:] + 43 at ViewController.m:34:5, address = 0x00000001010dff5b, resolved, hit count = 0 

 1.3: where = LinkPresentation`-[LPGameCenterInvitationMetadata setGame:], address = 0x00007fff2733e5e9, resolved, hit count = 0 
  • 如上也给其他带有Game字符的类下了断点。

给某一个文件下的带有相同字符串的方法下断点:

breakpoint set --file ViewController.m -r Game
  •  

简写:breakpoint->b
打印列表需要写全:breakpoint list或者break list

bt、frame命令

1、查看函数相关信息,使用p、down追踪函数的调用和被调用关系

frame select

使用bt命令查看函数调用堆栈

2、查找方法的调用者及方法名称

frame variable

methods、pviews

1、methods打印当前对象的属性和方法

methods self 
  •  

2、pviews打印当前视图的层级结构

以上两个命令是lldb插件名中的命令。chisel安装

……

标签:02,22,ViewController,APP,lldb,2021,breakpoint,断点,debugserver
来源: https://blog.csdn.net/box_kun/article/details/113933502

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有