常用的LLDB指令
print ,p:打印
po : 打印對(duì)象
格式:
x是16進(jìn)制喳逛,d是10進(jìn)制
字節(jié)大小:
b:byte 1字節(jié) 棵里,h :half word 2字節(jié) 润文,w :word 4字節(jié) ,g : giant word 8字節(jié)
讀取內(nèi)存:memory read/數(shù)量 格式 字節(jié)數(shù) 內(nèi)存地址
x/數(shù)量 格式 字節(jié)數(shù) 內(nèi)存地址
x/3xw 0x10010
修改內(nèi)存中的值:memory write 內(nèi)存地址 數(shù)值
memory write 0x00000010 10 //把對(duì)應(yīng)的內(nèi)存值修改為10
內(nèi)存對(duì)齊:結(jié)構(gòu)體的最終大小必須是最大成員大小的倍數(shù),提高CPU的訪問(wèn)速度
調(diào)試的時(shí)候想要查看匯編代碼:可在Xcode->Debug->Debug Workflow->Always Show Disassembly進(jìn)行勾選
我們編寫(xiě)的Objective-C代碼,底層其實(shí)都是C/C++代碼實(shí)現(xiàn)的,主要是基于C/C++的結(jié)構(gòu)體實(shí)現(xiàn)的,通過(guò)clang把Objective-C轉(zhuǎn)換成C/C++代碼
clang -rewrite-objc main.m -o main.cpp
OC -> 中間代碼(.ll) -> 匯編殿怜、機(jī)器代碼
- Objective-C在變?yōu)闄C(jī)器代碼之前典蝌,會(huì)被LLVM編譯器轉(zhuǎn)換為中間代碼(Intermediate Representation)
clang -emit-llvm -S main.m //可以使用該命令行指令生成中間代碼
不同平臺(tái)(windows,mac,iOS)支持的匯編語(yǔ)言是不一樣的,生成只支持iOS平臺(tái)的代碼,指定架構(gòu) 模擬器(i386),32bit(armv7),64bit(arm64)
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
將Objective-C代碼轉(zhuǎn)換為C\C++代碼
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 輸出的CPP文件
不編譯指定文件,在Xcode->TARGETS->Build Phases->Compile Sources刪除不想編譯的文件
查看對(duì)象的內(nèi)存地址:打印變量的內(nèi)存地址,在Xcode工具欄Debug->Debug Workflow->View Memory
一個(gè)16進(jìn)制位代表4個(gè)2進(jìn)制位,2個(gè)16進(jìn)制位代表8個(gè)2進(jìn)制位,即一個(gè)字節(jié)