LLDB常用命令
打印值、修改值、调用方法
p
、po
打印值
p
和 po
的区别在于使用 po
只会输出对应的值,而 p
则会返回值的类型以及命令结果的引用名。
(lldb) p width
(CGFloat) $10 = 70
(lldb) po width
70
类与方法
在AppDelegate中打断点,执行lldb命令查看
(lldb) p self
(AppDelegate *) $0 = 0x0000600003e46380 // 表名self是一个指针
(lldb) p sizeof(self)
(unsigned long) $1 = 8 // 指针的大小
(lldb) p sizeof(void *) // void * 代表指针
(unsigned long) $2 = 8
(lldb) p (int)class_getInstanceSize([AppDelegate class])
(int) $0 = 24 // 返回一个实例的大小
(lldb) p self
(AppDelegate *) $1 = 0x000060000325a500
(lldb) memory read/3wg $1 // 打印内存分布
0x60000325a500: 0x000000010535fd08 0x0000000000000000
0x60000325a510: 0x00007fe78c406b90
(lldb) p (Class)0x000000010535fd08 // 对象第一个内容是自己的class,近似isa,arm64架构下不一样
(Class) $4 = AppDelegate
(lldb) po 0x00007fe78c406b90
<UIWindow: 0x7fe78c406b90; frame = (0 0; 414 896); hidden = YES; gestureRecognizers = <NSArray: 0x600003c5b270>; layer = <UIWindowLayer: 0x60000325b2c0>>
类结构
xcrun -sdk iphoneos clang -rewrite-objc -F Foundation -arch armv7 main.m
可以将OC文件转为C++文件类型,下面代码是包含block的,将其转为C++文件类型
int main(int argc, char * argv[]) {
@autoreleasepool {
void(^block)(void) = ^(void){
};
block();
return 0;
}
}
clang -rewrite-objc mainBlock.m
执行编译命令