一般開發c語言程序,都是在ide中編碼,調試也是使用集成環境,有時候,我們的程序是在文本編輯器中編寫的,這時候可能使用gcc編譯,然後運行可執行程序。遇到需要調試的場景,我們就需要藉助gdb命令了。
gdb調試,不僅侷限於在linux上使用,只要機器上有gdb命令,在windows下也可以進行調試。我的機器上安裝了一個樹莓派的perl,使用strawberry-perl-5.32.0-64bit.msi進行的安裝,他自帶了一個c語言編譯運行的相關命令。所以可以在windows下進行gdb調試。
gdb調試需要進行gcc編譯的時候加上-g參數。在運行程序的時候,不再直接運行,而是加上gdb命令:
準備一個c程序:
swapdemo.c
#include <stdio.h>
void swap(int *a,int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 3,b = 5;
printf("before: a = %d,b = %d\n",a,b);
swap(&a,&b);
printf("after : a = %d,b = %d\n",a,b);
return 0;
}
編譯
Administrator@pail-pc ~/gdbdemo
$ gcc -g swapdemo.c
Administrator@pail-pc ~/gdbdemo
$ ls
a.exe maptest.cpp maptest.exe swapdemo.c
gdb調試:
gdb a.exe
進入了gdb調試命令行,我們可以進行如下的相關操作:
命令 | 功能 | 備註 |
run | 直接運行程序 | 簡寫r |
start | 開始調試,默認進入main函數第一行作爲斷點 | 簡寫st,與step的s作區分 |
next | 下一行 | 簡寫n |
step | 單步調試,一般用於進入方法體內部 | 簡寫s |
list | 查看代碼 | 簡寫l |
打印變量 | 簡寫p |
|
backtrace | 查看棧幀 | 簡寫bt |
frame | 切換棧幀,後面跟棧序號,通常與backtrace配合使用,先查看,再切換 | 簡寫f |
quit | 退出 | 簡寫q |
調試命令截圖:
run:
start:
next:
step:
list:
print:
backtrace && frame:
quit :
還有一些重要的命令,比如設置斷點break命令,它後面跟行號作爲參數,簡寫b。繼續 continue命令,運行程序到下一個斷點,簡寫c。