2025-05-25

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的差不多瞭。  

摘自  LOGOS  

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *