debugserver+lldb使用

一、概述

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、处理debugserver工具

  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/该路径下获取手机对应版本的debugserver工具
  • 或从越狱手机的/Developer/usr/bin路径下拉取debugserverMac上:scp -r -P2222 root@localhost:/Developer/use/bin/debugserver /Users/hibo/Desktop/

通过Xcode或直接创建一个en.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>

保存后对获取到的debugserver进行重签名,赋予新权限:

codesign -s - --entitlements en.plist -f debugserver

将重签后的debugserver传入到越狱手机的/usr/bin/路径下:

scp -r -P2222 /Users/hibo/Desktop/debugserver root@localhost:/usr/bin/

2、越狱手机启动debugserver服务

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

查看进程:

ps -A

debugserver附加到微信进程上:

debugserver localhost:12345 –a WeChat

debugserver *:12345 –a WeChat

注意:使用*:12345会导致连接失败:error: failed to get reply to handshake packet,请使用第一种连接方式即可。

3、使用Mac终端启动lldb和越狱手机上的debugserver建立连接

通过USB连接手机,使用iproxy映射端口:

iproxy 12345 12345
  • 第一个12345为本机使用端口号
  • 第二个12345为手机对外开启的端口号

在终端运行lldb,连接debugserver

process connect connect://localhost:12345

这样就连接上了,可使用lldb来调试越狱手机上的应用。

四、lldb常用命令

breakpoint使用

1、给函数下断点

breakpoint set --name test1 
br s -n test1 
b 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:]"
br s -n "-[ViewController save:]" -n "-[ViewController pause:]" -n "-[ViewController continues:]"

运行c继续运行,n单步执行,s进入函数内部执行,finish执行到函数尾部。

使用lldb命令进入断点模式,相当于Xcode上的pause program execution

br s -r . -s XXX

2、给指定方法下断点

breakpoint set --method game
br s -m game

3、指定选择器下断点

breakpoint set --selector touchesBegan:withEvent:
br s -S touchesBegan:withEvent:

4、指定文件、选择器下断点

breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
br s -f ViewController.m --selector touchesBegan:withEvent:

5、指定行设置断点

breakpoint set --file ViewController.m --line 22
br s -f ViewController.m -l 22

6、设置别名

breakpoint set --file game.m --line 55
br s -f game.m -l 55

command alias bfl br s -f %1 -l %2
bfl game.m 55

7、取消别名

command unalias bfl
command alias bfl breakpoint

8、查看断点列表

breakpoint list
br 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 

9、禁用断点

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

10、启用断点

breakpoint enable   //启用所有断点
breakpoint enable 1.1  //启用1处断点  
br enable
br enable 1.1

11、删除所有断点

breakpoint delete
breakpoint delete 1
br delete
br delete 1

删除只能删除一组,不能单个删除

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

breakpoint set -r Game:
br s -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字符的类下了断点。

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

br s -f ViewController.m -r Game

13、使应用进入断点

process interrupt 

br s -r . -s Shortcuts

14、继续

process  continue
continue
c

15、下一步

thread step-over
Next
n

16、进入

thread step-in
step
s

17、跳出

thread step-out
finish
f

简写:breakpoint->br
打印列表:breakpoint list或者br list

bt、frame命令

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

frame select

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

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

frame variable

methods、pviews

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

methods self 

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

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

……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335