常用的LLDB指令
print ,p:打印
po : 打印对象
格式:
x是16进制,d是10进制
字节大小:
b:byte 1字节 ,h :half word 2字节 ,w :word 4字节 ,g : giant word 8字节
读取内存:memory read/数量 格式 字节数 内存地址
x/数量 格式 字节数 内存地址
x/3xw 0x10010
修改内存中的值:memory write 内存地址 数值
memory write 0x00000010 10 //把对应的内存值修改为10
内存对齐:结构体的最终大小必须是最大成员大小的倍数,提高CPU的访问速度
调试的时候想要查看汇编代码:可在Xcode->Debug->Debug Workflow->Always Show Disassembly进行勾选
我们编写的Objective-C代码,底层其实都是C/C++代码实现的,主要是基于C/C++的结构体实现的,通过clang把Objective-C转换成C/C++代码
clang -rewrite-objc main.m -o main.cpp
OC -> 中间代码(.ll) -> 汇编、机器代码
- Objective-C在变为机器代码之前,会被LLVM编译器转换为中间代码(Intermediate Representation)
clang -emit-llvm -S main.m //可以使用该命令行指令生成中间代码
不同平台(windows,mac,iOS)支持的汇编语言是不一样的,生成只支持iOS平台的代码,指定架构 模拟器(i386),32bit(armv7),64bit(arm64)
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
将Objective-C代码转换为C\C++代码
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的CPP文件
不编译指定文件,在Xcode->TARGETS->Build Phases->Compile Sources删除不想编译的文件
查看对象的内存地址:打印变量的内存地址,在Xcode工具栏Debug->Debug Workflow->View Memory
一个16进制位代表4个2进制位,2个16进制位代表8个2进制位,即一个字节