1、简介
GDB工具是在linux环境下编程时使用的一种调试工具,功能强大,使用方便,是程序调试的利器。
DB调试条件: 对于GDB调试的程序文件,在编译的时候需要加上 -g 选项,生成的可执行文件才能用GDB进行源码级的调试。其中 -g 选项是在可执行文件中加入源代码的信息,同时调试时必须保证GDB能找到源代码文件。所以源码文件不可删除
2、gdb调试例子
1、创建/main.c
#include <stdio.h>
void change(int *a, int *b)
{
int tmp = *a;
*a=*b;
*b=tmp;
}
int main()
{
int a=5;
int b=3;
change(&a, &b);
printf("num a=%d\nnum b=%d\n", a, b);
return 0;
}
2、编译/main.c
gcc -g main.c -o main.out
3、创建main2.c
#include <stdio.h>
void change(int a, int b)
{
int tmp = a;
a=b;
b=tmp;
}
int main()
{
int a=5;
int b=3;
change(a, b);
printf("num a=%d\nnum b=%d\n", a, b);
return 0;
}
4、编译main2.c
gcc -g main2.c -o main2.out
5、开始调试
gdb main2.out
6、列出当前软件项目源代码
使用l 命令查看源码; l 命令是list 命令的缩写,因此使用l 命令效果和list 命令等价 ;
7、继续执行
按回车,表示继续执行上一步的命令
8、开始调试
使用命令start 开始调试, start 命令表示:开始调试,停在第一行代码处
9、打印变量
使用命令p 打印变量; p 命令是print 命令的缩写;
10、调试下一行
使用命令n 执行下一行代码; n 命令是next 命令的缩写;
11、进入函数内执行
执行s 命令; s:step执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
12、查看函数堆栈
执行命令bt
13、切换堆栈
执行命令f 1
14、退出调试
使用命令q
3、GDB调试指针
证明内存是连续的
1、创建/main.c
#include <stdio.h>
void change(int *a, int *b)
{
int tmp = *a;
*a=*b;
*b=tmp;
}
int main()
{
int a=5;
int b=3;
change(&a, &b);
printf("num a=%d\nnum b=%d\n", a, b);
return 0;
}
2、编译/main.c
gcc -g main.c -o main.out
3、调试main.out
gdb main.out
|