寫個極度簡單的 C 程式來當範例:
#include <stdio.h>int add(int a, int b)
{
return a + b;
}int main(int argc, char *argv[])
{
for (int i = 0; i < 5; ++i)
{
printf("%i\n", add(i, 2 * i));
}
for (int i = 1; i < argc; ++i)
{
printf("%s\n", argv[i]);
}
return 0;
}
起手式
% gcc -g main.c -o main
: 毫無懸念,先 compile% lldb
: 進入lldb
進入 lldb
之後
(lldb) file ./main
: 載入可執行檔(lldb) breakpoint set -f main.c -l 10
orb main.c:10
: 設中斷點(lldb) run [arg1,[arg2,...]]
: 執行可執行檔,這時可以帶入參數,舉例來說,run -a -b dd --try ee
相當於執行./main -a -b dd --try ee
(lldb) frame info
: 顯示當前 stack frame 的資訊,像是下面這樣

(lldb) f [<index>]
: 依照 index 顯示 stack frame 的資訊,還會連帶顯示相關程式碼:

(lldb) c
orcontinue
: 顧名思義,繼續執行到下一個中斷點(lldb) dis
: 對 C debugger 熟悉的朋友應該不會陌生,就是反組譯。譬如我們在add
下個中斷點,然後執行dis
會看到:

(lldb) po
or(lldb) p
: 基本上就是 print ,只是用的 format 不一樣,譬如在add
裡,我們可以執行(lldb) po a
或(lldb) p a
會看到:

(lldb) env
: 顯示環境變數,會看到所有當下的環境變數,我的環境變數太多了,但大致長這樣:

(lldb) kill
: 終止目前 debugging process(lldb) quit
or^D
: 跳出lldb
結語
這邊就列出一晚上我用了一下的幾個基本指令的基本用法,還有一些進階技巧還用不上,以後再說 XDDDD。
之前朋友有示範給我看用 gdb
去 run python 然後跑起來去對 C/C++ 的 .so
來 debug,我想 lldb
應該也可以做一樣的事,試出來就下一篇再寫囉。