GDB调试器
对于Linux程序员来讲,GDB(GNU Debugger)通过与GCC的配合使用,为基于Linux的软件开发提供了一个完善的调试环境。
将调试符号插入到生成的二进制代码中的gcc编译
gcc -g hello.c -o hello
GDB使用流程
代码见后面 代码1
**首先使用GCC对test.c进行编译。**
> 注意:GDB进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过GCC编译生成可执行文件才能用GDB进行调试。编译时一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则Gdb无法载入该可执行文件。
[root@vm-dev myprg]#gcc -g test.c -o test
**GDB使用流程—进入GDB调试环境**
[root@vm-dev myprg]# gdb test
**GDB使用流程**
-查看程序源文件 (gdb) list
-设置断点 (gdb) break 6
-查看断点设置情况 (gdb) info b
-运行程序 (gdb) run
-查看变量值
(gdb) print n
$1 = 0
(gdb) print i
$2 = 134518440
-单步运行 (gdb)next (gdb)step
-恢复程序运行
(gdb) c
Continuing.
The sum of 1-50 is :1275
Program exited normally.
-GDB的命令可以通过查看help进行查找
(gdb) help
(gdb) help data
(gdb) help call
-断点设置与恢复命令
函数断点
(gdb) break sum
条件断点
(gdb) break 8 if i= =10
GDB基本命令
GDB中的命令主要分为以下几类:
工作环境相关命令;
设置断点与恢复命令;
源代码查看命令;
查看运行数据相关命令及修改运行参数命令。
工作环境相关命令
命令格式 含义
set args 指定运行时参数,如set args 2;
show args 查看设置好的运行参数;
path dir 设定程序的运行路径;
show paths 查看程序的运行路径;
set en var[=value] 设置环境变量;
show en [var] 查看环境变量;
cd dir 进入到dir目录,相当于shell中的cd命令;
pwd 显示当前工作目录;
shell command 运行shell的command命令。
断点设置与恢复命令
命令格式 含义
info b 查看所设断点;
break 行号或函数名 设置断点;
tbreak 行号或函数名 设置临时断点,到达后被自动删除;
delete [断点号] 删除指定断点,其断点号为“info b”中的第一列。若缺省断点号则删除所有断点;
disable [断点号] 停止指定断点,使用“info b”仍能查看此断点。同delete一样,若缺省断点号则停止所有断点;
enable [断点号] 激活指定断点,即激活被disable停止的断点;
condition [断点号] 修改对应断点的条件;
ignore [断点号] 在程序执行中,忽略对应断点num次;
step 单步恢复程序运行,且进入函数调用;
next 单步恢复程序运行,但不进入函数调用;
finish 运行程序,直到当前函数完成返回;
c 继续执行函数,直到函数结束或遇到新的断点。
代码1
【GDBTest.c】
#include <stdio.h>
void sum(int m);
int main()
{
int i,n=0;
sum(50);
for(i=1; i<=50; i++)
{
n += i;
}
printf("sum of 1-50 is %d \n", n );
return 0;
}
void sum(int m)
{
int i,n=0;
for(i=1; i<=m;i++) n += i;
printf("The sum of 1-%d is %d\n",m,n);
}