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