一般开发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。