1、gdb调试的命令
gcc test1.c -g -o test
2、安装gdb
apt-get install gdb
3、进入调试
gdb test
4、开始调试
start
17 void main() :表示从17行开始执行main函数
5、显示代码
方式(一)
list
方式(二)
l是list的简写形式
l
6、下一步
n是next的简写
next
7、查看函数
list+函数名
list myfun
8、查看变量名
p是print的简写
print i
9、进入某个函数
s是step的简写
step
10、设置断点
31表示在gdb中的行号
break 31
11、查看断点信息
info breakpoints
12、直接跳转到下一个断点
简写是c
continue
当前运行的是第17行,在31行有一个断点,执行continue命令后直接运行到31行
13、删除断点
delete breakpoints + 断点编号
delete breakpoints 3
14、修改变量的值
set var num=20
15、查看之前所调用的所有函数的堆栈
简写是bt
backtrace
16、切换栈帧
frame 1
16、自动展示变量的值
17、一次显示两个变量
18、查看数组信息
(1)查看buff中的20ge内存地址
x/20 buff
(2)查看数组中第1个元素的值
p buff[0]
注:
1、01.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int myfun(int a){
int i = 0;
int* buff = (int*)malloc(sizeof(int)*100);
while(i<100){
buff[i] = a;
a+=i;
i++;
}
free(buff);
return a/2;
}
void main(){
printf("begin...\n");
int num = 0;
if(num > 10){
printf("%d>10\n",num);
}else{
printf("%d<=10\n",num);
}
int i;
for(i=0;i<5;i++){
printf("i:%d\n",i);
num+=i;
}
myfun(&num);
printf("end...\n");
}
2、
gdb调试
编译加上-g参数
gcc test1.c -g -o test1
进入调试
gdb test1
开始调试
start
显示代码
list-简写l
list 函数名称(查看函数内容)
list 行数(查看某行代码)
执行下一步
next-简写n
查看变量
print 变量名-简写p
进入到某个函数
step-简写s
设置断点
break 行号(gdb中的行号)-简写b
全速运行
continue-遇到断点会停止-简写b
查看断点信息
info breakpoints
删除断点
delete breakpoints 断点编号
修改变量的值
set var 变量=值
程序调用堆栈
当前函数之前的所有已调用函数列表,每一个都分配一个“帧”,最近调用的函数在0号帧里
backtrace-简写bt
切换栈帧
frame 1(查看指定栈帧的变量)
自动显示
display 变量名
取消自动显示
undisplay 行号(自动显示的行号)
查看内存布局
x /20 地址
x /20 buff-查看buff数组的前20个元素