一、GDB概述
GDB是一種功能強大的調試工具,它可以讓程序員在程序執行時候監測程序的狀態,這對於程序員找出程序運行中的錯誤是非常有用的。
下面讓我們來學習一些關於Linux GDB調試命令的使用。
二、程序調試
首先,讓我們來編寫一個簡單的C語言程序,例如:
#include <stdio.h> int main() { int a = 1; int b = 2; printf("a: %d, b: %d\n", a, b); int sum = a + b; printf("sum: %d\n", sum); return 0; }
保存以上代碼為”test.c”文件。使用GCC編譯器編譯程序:
gcc -g -o test test.c
其中,”-g”選項告訴GCC編譯器生成調試信息。
接下來,讓我們啟動GDB:
gdb ./test
使用”run”命令來運行程序:
(gdb) run
你會看到如下輸出:
Starting program: /home/user/test a: 1, b: 2 sum: 3 Program exited normally.
然後輸入「quit」命令退出GDB。
三、斷點調試
GDB最常用的調試命令就是斷點命令,使用斷點我們可以在程序的任何地方暫停程序的執行,並檢查程序的狀態。
讓我們在剛才的C語言程序中添加一個斷點:
#include <stdio.h> int main() { int a = 1; int b = 2; printf("a: %d, b: %d\n", a, b); int sum = a + b; printf("sum: %d\n", sum); return 0; }
在第七行後添加斷點:
#include <stdio.h> int main() { int a = 1; int b = 2; printf("a: %d, b: %d\n", a, b); int sum = a + b; printf("sum: %d\n", sum); return 0; }
保存並編譯程序,啟動GDB,並輸入如下命令設置斷點:
break test.c:9
使用”run”命令啟動程序並進入GDB調試模式:
(gdb) run
程序啟動後,會在第9行暫停執行:
Starting program: /home/user/test Breakpoint 1, main () at test.c:9 9 int sum = a + b; (gdb)
使用”next”命令單步執行程序,你會看到變數sum的值更新:
10 printf("sum: %d\n", sum); (gdb) next sum: 3 11 (gdb)
使用”print”命令來查看變數的值:
(gdb) print sum $1 = 3
使用”quit”命令退出GDB。
四、查看源代碼
在GDB中可以通過”list”命令來查看源代碼:
(gdb) list 1 #include <stdio.h> 2 3 int main() { 4 int a = 1; 5 int b = 2; 6 7 printf("a: %d, b: %d\n", a, b); 8 9 int sum = a + b; 10 11 printf("sum: %d\n", sum); 12 13 return 0; 14 }
你可以在輸出窗口中看到源代碼的行數以及注釋。
五、查看棧信息
使用”backtrace”命令可以查看當前函數的調用棧:
#include <stdio.h> void func() { int c = 3; printf("c: %d\n", c); } int main() { int a = 1; int b = 2; printf("a: %d, b: %d\n", a, b); func(); int sum = a + b; printf("sum: %d\n", sum); return 0; }
編譯並啟動GDB:
gcc -g -o test test.c gdb ./test
然後使用”run”命令啟動程序:
(gdb) run
使用”backtrace”命令可以查看當前的函數調用棧:
(gdb) backtrace #0 func () at test.c:5 #1 0x000055555555518d in main () at test.c:14
“#0″表示當前函數的編號,棧中的最後一個函數調用是最後編號的。”func()”函數調用了”main()”函數。
六、查看變數的值
使用”print”命令可以查看變數的值:
(gdb) print sum $1 = 3 (gdb)
如果變數是數組類型,則可以使用”parray”命令查看數組的內容:
#include <stdio.h> int main() { int arr[] = {1,2,3,4,5}; for(int i = 0; i < 5; i++) { printf("%d ", arr[i]); } return 0; }
編譯並啟動GDB:
gcc -g -o test test.c gdb ./test
使用”run”命令啟動程序:
(gdb) run
在程序暫停時使用”parray”命令查看數組的內容:
(gdb) parray arr $1 = {1, 2, 3, 4, 5}
以上就是關於Linux GDB調試命令的詳細介紹。希望這篇文章對你有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239007.html