安装facebook/chisel DerekSelander/LLDB
LLDB会从默认的~/.lldbinit加载自定义脚本
git clone https://github.com/facebook/chisel.git
git clone https://github.com/DerekSelander/LLDB.git
touch ~/.lldbinit
vim ~/.lldbinit
# ~/.lldbinit
command script import pwd/chisel/fblldb.py
command script import pwd/LLDB/lldb_commands/dslldb.py
lldb一般最常用的就是po(print object)
-
pviews
可以打印页面结构(报错需要引用UIKitexpression @import UIKit
) -
presponder 0x15feab460
可以打印响应链 -
methods 0x15feab460
可以打印属性和方法 -
search UIImageView
可以查找页面元素 - b 可以用来打断点
- po $x1 可以打印参数
- pblock 可以打印block (逆向可以查看block里面的参数了)
(lldb) b [LoginManager requestDirectLoginInController:completion:failure:]
Breakpoint 1: where = recipe`-[LoginManager requestDirectLoginInController:completion:failure:] at LoginManager.m:93, address = 0x0000000100748044
(lldb) po $x3
<__NSGlobalBlock__: 0x102fa9300>
(lldb) pblock 0x102fa9300
Imp: 0x100311768 Signature: void ^(NSDictionary *, bool, bool);
配合MallocStackLogging环境变量 使用lldb.macosx.heap.py
位置/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/macosx/heap.py
虽然表明OS X使用但是iOS也可以使用
- 查看一个对象分配内存的堆栈(需要配合MallocStackLogging malloc_info -s)
- 得到内存指定类的实例对象(objc_refs)
- 得到一个内存地址所有被引用的地方(ptr_refs)
- 搜索内存中指定的C字符串(cstr_refs)
(lldb) command script import ;;db.macosx.heap
"malloc_info", "ptr_refs", "cstr_refs", "find_variable", and "objc_refs" commands have been installed, use the "--help" options on these commands for detailed help.
网友评论