Linux下的调试利器--GDB
简介:
gdb是GUN组织开发的Linux下的调试利器。一般用于调试C/C++程序。
GDB主要有以下4个功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
安装gdb:
CentOS 7下可直接输入命令安装:
yum install gdb
使用gdb调试:(以test.c为例)
1.使用gcc -g test.c -o test(或者g++ -g test.cpp -o test调试.cpp程序)命令编译需要调试的C语言程序,得到二进制文件test(也可定义为其他的)
2.执行gdb test进入调试状态
3.执行需要执行的命令:
-
list:
list [num] 显示 以第num行为中心的10行代码
list [function] 显示函数名为function的函数的源程序
list 显示当前行后面的代码
lsit - 显示当前行前面的代码
-
run:
set args 设置运行参数,set args 1 2 3
show args 查看设置好的运行参数
path <dir> 设置运行路径
show paths 查看运行路径
cd <dir> 进入目录
pwd:显示当前所在的路径
-
break:
break:在下一条指令处停住
break <function> 为函数打断点,在进入函数时停止,C++中可以使用class::function或function(type, type)格式来指定函数名。
break <linenum> 在指定行打断点
break +num / break -num 在当前行号的前面或者后面的num行停住。
break filename:linenum 在源文件的指定行停住
break filename:function 在源文件的指定函数入口停住
break *address 在程序运行的内存地址处停住
info: 查看断点、寄存器、观察点和信号等信息
单步:
step <num> 执行num步然后停止,如果有函数调用,则进入该函数(前提是才函数被编译时发现错误信息),
next <next> 执行num步然后停止,如果有函数调用,它不会进入函数
finish 运行程序,直到当前函数完成返回,并打印函数返回时的对战地址和返回值及参数
until 一直在循环体内单步执行
continue 程序停止时可以使用它恢复运行,直到程序结束或者到达下一个断点
print 程序被停住时可以使用它查看当前程序的运行数据
print可以设置输出格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
watch 观察某个表达式的值是否变化,如果有变化则马上停止
examine 查看内存地址中的值
return 如果在函数中设置了断点,断点后还有语句没有执行完,可以用return强制函数忽略没执行的语句并返回