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

2300

被折叠的 条评论
为什么被折叠?



