这篇文章将gdb的简单使用,通过此篇文章你能学习到使用gdb进行调试程序
在Linux中编写程序时,如何进行程序的debug工作呢?今天来介绍下gdb这个工具,可以在Linux下直接man gdb查看帮助信息
常用命令:
命令 | 命令缩写 | 命令说明 |
---|---|---|
run | r | 开始运行程序,在第一个断点处停住 |
start | st | 启动调试,在main函数中第一条语句停住 |
next | n | 执行下一行,不会进入函数内部 |
step | s | 执行下一条语句,会进入函数 |
display | disp | 查看某个变量,每次停下来都会显示它的值 |
info | i | 查看程序信息 |
break | b | 设置断点 |
p | 打印变量值 | |
continue | c | 继续运行程序 |
set var name=value | 设置变量的值 | |
list | l | 显示程序源码,默认显示10行 |
kill | k | 终止程序调试 |
watch | 监视变量值的变化 | |
breaktrace | bt | 查看函数调用信息 |
quit | q | 退出gdb环境 |
基础操作:
(1)编译调试程序 :gcc -g xxx.c -o xxx
(2)进入gdb环境 : gdb xxx
(3)根据需求执行上面的命令
(4) 退出gdb
test.c
#include
int main(int argc, char *argv[])
{
int a=0,b=0,c=0;
a=1;
b=2;
c=a+b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
zhixia# gcc -g test.c -o test
zhixia# gdb test
通过上面的操作已经进入了gdb环境了
输入list查看代码:从上次位置开始显示,默认一次显示10行
(gdb) list
1 #include
2
3 int main(int argc, char *argv[])
4 {
5 int a=0,b=0,c=0;
6 a=1;
7 b=2;
8 c=a+b;
9 printf("a=%d,b=%d,c=%d\n",a,b,c);
10 return 0;
(gdb)
设置断点:执行到此位置会停下来
break line/function/
查看断点信息 : info b
删除断点:delete breakpoints 断点号
使能断点: enable 断点编号
失能断点: disable 断点编号
(gdb) break 7
Breakpoint 1 at 0x400551: file test.c, line 7. //断点编号是1
(gdb) r
Starting program: /root/test/test
Breakpoint 1, main (argc=1, argv=0x7fffffffdf78) at test.c:7
7 b=2;
显示变量值:display
(gdb) display a
1: a = 1
(gdb)
单步调试命令:next/step
step n,next n 表示连续单步执行n条指令,如果期间遇到断点,则停下来
(gdb) next
8 c=a+b;
1: a = 1
(gdb) step
9 printf("a=%d,b=%d,c=%d\n",a,b,c);
1: a = 1
(gdb)
打印变量信息print
(gdb) p a
$1 = 1
(gdb)
set var name=value
在程序运行中动态改变变量的值
(gdb) set var a=4
(gdb) p a
$2 = 4
(gdb)