LLDB是一個高效的c/c++的偵錯程式,與LLVM編譯器一起使用,提供了豐富的流程控制和資料檢測,有效的幫忙我們除錯程式。
LLDB是XCode中預設的偵錯程式,Android Studio中可以在SDK Tools中下載LLDB最新版本,在Android Studio中和gradle-experimental
一起除錯NDK專案。
LLDB安裝
在Androis Studio中的Toolbar中可以找到Android的更新圖示,開啟可以看到Android SDK的升級配置,在SDK Tools中可以找到LLDB的安裝選項。
在上一篇的《Andorid Studio NDK開發:Experimental Plugin》中介紹了使用gradle-experimental可以簡化NDK的開發配置,其中提到了在執行選項中有兩個執行的配置選項app
和app-native
,其中的app-native就是用來執行和除錯JNI開發的。
Debug JNI
選擇app-native
,點選debug按鈕可以直接進入Debug狀態:
可以看到程式在斷點處暫停了,在左側的狀態裡面可以看到變數的值和指標地址:
LLDB
從上面的圖中可以看到除了Variables
以外還有一個tab是LLDB
,點選進入可以看到(lldb)
的命令列,在這裡面我們可以輸入LLDB的命令,幫助除錯程式。
LLDB常用命令
- print (p)列印命令,列印變數以及其值
p chars
1(char [10]) $0 = "i am test" - po 列印變數的值
po chars
1"i am test" - expr 可以在除錯時動態執行指定表示式,並列印結果,用於在除錯過程中修改變數的值
比如我們在程式裡面定義int b=1;可以在斷點的時候使用expr
expr b=10
1 (int) $0 = 10
- image用於定址,可以用來棧地址對應的程式碼位置,image命令的引數比較多
image
1234567891011121314The following subcommands are supported:add -- Add a new module to the current target's modules.dump -- A set of commands for dumping information about one ormore target modules.list -- List current executable and dependent shared libraryimages.load -- Set the load addresses for one or more sections in atarget module.lookup -- Look up information within executable and dependentshared library images.search-paths -- A set of commands for operating on debugger target imagesearch paths.show-unwind -- Show synthesized unwind instructions for a function.For more help on any particular subcommand, type 'help '. - bt 命令用來堆疊資訊