ndk-gdb
最近用NDK開發(fā)一些東西,結(jié)果調(diào)試相關(guān)的內(nèi)容學(xué)習(xí)了不少。因?yàn)樽约阂彩稚跃筒槐WC接下來介紹的內(nèi)容完全正確。
編譯可調(diào)試代碼
NDK_DEBUG=1;apk的androidmanifest.xml也要配置為debugable=true。
遇上麻煩的時(shí)候NDK_LOG=1,--verbose,V=1可以輸出更詳細(xì)的信息排查問題。
調(diào)試符號(hào)debug symbol
./obj/local/armeabi。如果動(dòng)態(tài)庫不放到這里,就會(huì)提示no debug symbol。
如果想知道當(dāng)前哪些動(dòng)態(tài)庫包含了調(diào)試信息,使用shared指令。
gdb)shared
匯編調(diào)試
- disass,dump函數(shù)的全部匯編
- ni,單步調(diào)試匯編
- si,進(jìn)入?yún)R編子函數(shù)
- display/5i $pc,這是我調(diào)試前喜歡的設(shè)置,這樣每調(diào)試一步,就會(huì)自動(dòng)打印下5條指令,很舒適。
arm匯編
arm的匯編和x86的匯編有些不一樣,比較常見的是這幾條:
- bl,類似call,函數(shù)調(diào)用。r0-rn是傳入?yún)?shù),調(diào)用后r0是返回值。
- ldr,將內(nèi)存載入寄存器。
- str,將寄存器寫入內(nèi)存。
- ldr rn,[pc,#offset]
add rn,pc,rn
這種指令組合比較特別,其實(shí)是將這個(gè)函數(shù)外的變量地址加載進(jìn)來,也就是訪問全局變量。
-
局部變量,包括當(dāng)前函數(shù)參數(shù),使用sp+#offset表示其內(nèi)存位置。
其他的就跟x86的差不多了。
posted on 2012-03-12 17:33
LOGOS 閱讀(4559)
評(píng)論(2) 編輯 收藏 引用