注:原創不易,轉載請務必註明原做者和出處,感謝支持!數組
總結GDB調試的一些經常使用命令和調試技巧。不按期更新。函數
GDB的命令有不少,但只須要掌握下面經常使用的幾個即可快速上手。學習
簡寫 | 全稱 | 備註 |
---|---|---|
l | list | 顯示指定行號或者指定函數附近的源代碼 |
b | break | 在指定行號或者指定函數開頭處設置斷點。如b main |
r | run | 運行程序,直到程序結束或者遇到斷點而停下 |
c | continue | 在程序中斷後繼續執行程序,直到程序結束或者遇到斷點而停下。注意在程序開始執行前只能用r,不能用c |
n | next | 執行一條語句。若是有函數調用,則把它做爲一個總體 |
s | step | 執行一條語句。若是有函數調用,則進入函數內部 |
u | until | 執行到指定行號或者指定函數的開頭 |
p | 顯示變量或表達式的值 | |
disp | display | 把一個表達式設置爲display,當程序每次停下來時都會顯示其值 |
cl | clear | 取消斷點,和b的格式相同。若是該位置有多個斷點,將同時取消 |
i | info | 顯示各類信息。如i b顯示全部斷點,i disp顯示display,而i lo顯示全部局部變量 |
h | help | 獲取幫助信息 |
打印數組a的前6個值:p *a@6
打印數組a的第6個元素開始的後4個值:p *(a+5)@4
spa
(gdb) l 1 #include <iostream> 2 using namespace std; 3 4 int main(int argc, char ** argv) 5 { 6 int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 7 8 cout << endl; 9 return 0; 10 } (gdb) 11 (gdb) b 7 Breakpoint 1 at 0x40089a: file test.cpp, line 7. (gdb) r Starting program: /home/wallace/a.out Breakpoint 1, main (argc=1, argv=0x7fffffffe528) at test.cpp:8 8 cout << endl; (gdb) p *a@6 $1 = {0, 1, 2, 3, 4, 5} (gdb) p *(a+5)@4 $2 = {5, 6, 7, 8} (gdb)
好比程序中有條輸入語句爲cin >> n >> m >> r >> c
,你想查看它們有沒有正確被輸入,你能夠在這條語句以後同時打印它們的值。注意,同時打印的變量必須是同類型的。調試
(gdb) l 0 1 #include <iostream> 2 using namespace std; 3 4 int main(int argc, char ** argv) 5 { 6 int n, m, r, c; 7 n = m = r = c = 10; 8 9 return 0; 10 } (gdb) b 8 Breakpoint 1 at 0x4006da: file test.cpp, line 8. (gdb) r Starting program: /home/wallace/a.out Breakpoint 1, main (argc=1, argv=0x7fffffffe528) at test.cpp:9 9 return 0; (gdb) p {n, m, r, c} $1 = {10, 10, 10, 10} (gdb)
使用info b
來查看全部的斷點信息,使用del 斷點號
命令來刪除特定的一個斷點,使用del 起始斷點號-截止斷點號
來刪除多個斷點。code