LLDB命令及扩展

br命令:设置各种类型断点

列出断点列表

br l

删除断点(2是断点id)

br delete 2

enable断点

br e 2

disable断点

br di 2

设置断点(30是行数)

b ViewController.m:30

设置symbolic断点

br set -n viewDidLoad

设置条件断点

br mod -c "totalValue > 3000" 2

删除条件断点

br mod -c "" 2

在某一个断点处执行多个命令

br com add 2
> bt
> continue
> DONE

继续执行

continue
c

单步执行

n

单步进入

s

退出当前函数

finish

expr命令:可以不用修改代码即可以在程序运行时修改程序数据和行为

expo self.view.hidden = YES
expr -L — 5+5
expr (void)NSLog(@“hello world")
expr -- (CGRect)[self.view frame]

expr int $debugVar = 5
expr NSString *$debugString = @"ezio cham"

expr NSData *$data = [$jsonString dataUsingEncoding: 4] //lldb不认识enum,需要传具体的值

backtrace命令

bt

bt all

thread命令:在排查多线程问题时会用到

thread backtrace

thread backtrace all

显示thread列表

thread list

选择id为1的thread

thread select 1

使用thread命令完成断点功能(100是行号)

thread until 100

修改方法返回值(在代码中的return语句所在行执行)

thread return @"new result"

example:

thread until 63(63行是当前方法的return语句所在行)
thread return YES

frame命令

查看当前frame的变量列表

frame variable

查看当前frame 名为varName的变量的值

frame variable varName

frame info

选择id为2的frame

frame select 2

选择当前frame的下一个frame

frame select -relative -1

watchpoint

查看当前watchpoint列表

watchpoint list


watchpoint delete 1


watchpoint set variable varName

可以watch expression(my_pointer为expression的返回值)

watchpoint set expression — my_pointer

设置watchpoint的条件

watchpoint modify -c “_x > 0” 1

删除条件

watchpoint modify -c “” 1

script命令

查看lldb使用的python版本

script print(sys.version)

进入lldb的python环境

script

使用python脚本

breakpoint command add -s python 1

使用python 函数my_script.breakpoint_func

breakpoint command add -F my_script.breakpoint_func 1

command命令

引入python脚本并指定新command命令:cmd_name

command script import “~/my_script.py"
command script add -f my_script.python_function cmd_name

引入python脚本并设置在断点中使用

command script import “~/my_script.py"
breakpoint command add -F my_script.breakpoint_func 1

引入其他lldb script

command script import “~/my_script.txt"

删除命令pf

command unalias pf

显示命令历史列表(report navigator中有更详细的内容)

command list

alias

获取当前所有alias

help -a 

获取和关键字相关的alias

apropos break 

设置positional alias

command alias sbr breakpoint set -l %1 

command alias pf expr (CGRect)[self.view frame] 

设置regular alias

command regex sbr ’s/(\[0-9\]+)/breakpoint set -l %1' 

command regex pf 
s/(.+)/expr (CGRect)[%1 frame]/ 
s/^$/expr (CGRect)[self.view frame]/ 

持久化alias
创建~/.lldbinit文件 ,添加以下内容:

command regex pf ‘s/(.+)/expr (CGRect)[%1 frame]/’ ‘s/^$/expr (CGRect)[self.view frame]/’ 

custom summary

type summary add CGRect -s "width = ${var.size.width}, height = ${var.size.height}" 

为SavingsAccount设置summary

command script import ~/account.py 
type summary add -F account.count_summary SavingsAccount 

删除

type summary delete CGRect 

过滤,只显示firstName属性

type filter add SavingsAccount —child _firstName 

改变显示格式

typedef int hex_month 
type format add —format hex hex_month 

quicklook

quicklook in lldb
https://github.com/ryanolsonk/LLDB-QuickLook

quicklook in xcode
http://nshipster.com/quick-look-debugging/

扩展LLDB命令

lldb的python接口文档
http://lldb.llvm.org/python_reference/index.html

chisel:Facebook的LLDB扩展

border self.view 
border --color green self.view 

让view透明

mask self.button 

让view从透明状态恢复

unmask self.button 

打印当前界面的layer tree

pca 

打印当前界面的view 层级

pviews 

打印view的responder chain

presponder self.view 

交互式查看view的层级树

vs self.view 

重绘当前界面

caflush 

快速闪烁view

flicker self.view 

显示view

show self.view 

隐藏view

hide self.view 

打印class的继承树

pclass self.property 

截屏预览

visualize self.view 
坚持原创技术分享,您的支持将鼓励我继续创作!