调试GDB程序之前的安装gcc或者G++
安装方式
yum install gcc (gcc安装方式)
yum install gcc-c++ (注意不是yum install g++)
GDB调试方法有以下几种
1,gdb <可执行文件>,在可执行文件目录下执行gdb,不然的加路径
2,gdb <core文件>,core文件是服务器宕机之后生成的dump文件,可以定位问题
3,gdb attach pid,这种方式一般用于调试服务,服务是一直启动,将进程attach上就可以了,或者先启动gdb,再输入attach pid 也可以,detach解除附加的调试进程
验证一下测试程序:
#include<stdio.h>
int add(){
int res = 0;
int i;
for (i = 0; i < 100; ++i)
{
res += i;
}
return res;
}
void main(){
int res = add();
printf("res = %d\n", res);
int b = 10;
b += 20;
printf("b = %d\n", b);
int i = 0;
while(1){
i += 1;
}
}
编译:gcc -g test.c -o test,记得带上-g,不然生成的程序没有调试信息,不能进行gdb调试
gdb test(开启调试)
list(可以输入简写l,显示文件,可能显示不全,点击enter键会显示后面的文件)
break n|func (设置断点,n是指程序的行数,func是指函数名,也可以用简写b)
info breakpoints(显示断点信息)
run (运行程序,简写r)
然后程序就会在断点处停止
使用n调到下一步
c则运行到下一个断点处
p 则是打印变量
bt 查看函数堆栈
quit (退出gdb调试,简写q)
附上一些常用的gdb命令
backtrace / bt 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)
breakpoint / b 在程序中设置一个断点
cd 改变当前工作目录
clear 删除刚才停止处的断点
commands 命中断点时,列出将要执行的命令
continue 从断点开始继续执行
delete 删除一个断点或监测点;也可与其他命令一起使用
display 程序停止时显示变量和表达时
down 下移栈帧,使得另一个函数成为当前函数
frame 选择下一条continue命令的帧
info 显示与该程序有关的各种信息
jump 在源程序中的另一点开始运行
kill 异常终止在gdb 控制下运行的程序
list 列出相应于正在执行的程序的原文件内容
next 执行下一个源程序行,从而执行其整体中的一个函数
print 显示变量或表达式的值
pwd 显示当前工作目录
ptype 显示一个数据结构(如一个结构或C++类)的内容
quit 退出gdb
reverse-search 在源文件中反向搜索正规表达式
run 执行该程序
search 在源文件中搜索正规表达式
set variable 给变量赋值
signal 将一个信号发送到正在运行的进程
step 执行下一个源程序行,必要时进入下一个函数
undisplay display 命令的反命令,不要显示表达式
until 结束当前循环
up 上移栈帧,使另一函数成为当前函数
watch 在程序中设置一个监测点(即数据断点)
whatis 显示变量或函数类型