gdb工具的使用

GDB是一个交互式的调试工具,在linux系统中可以很好地帮助我们完成程序的调试。

它的主要功能有:

1. 设置断点,让程序直接运行至可能出错的地方

2. 查看变量的值,在调试过程中随时查看我们关注的变量的值。

3. 修改变量的值,这是VS的调试器所不具有的功能,可以帮助我们更快的定位程序的问题所在。

那么gdb调试工具要怎么用呢?

1. 首先编译可执行程序的时候需要增加额外的编译选项-g. 例如,源码为example.c的文件需要用gcc -g -o example example.c.

2. 运行gdb example,进入到gdb调试命令行的输入界面。

3. 进入到调试界面以后如何调试呢?接下来介绍几个比较有用并且调试中常用的命令。

     (1)list命令,显示源文件的内容,可以用list 4,8只显示第4行到第8行的内容。

     (2)break line-number, break function-name, break line/functionname if condition, break filename:line-number/function-name

分别对应在指定行号设置断点,函数名字前设置断点,满足condition条件时断点有效,在相应源文件的某行/某函数设置断点。

      (3)info break,显示当前设置的所有断点。

      (4)run,运行程序,在断点处停下

      (5)print i, 打印变量当前值;print expression,打印任意表达式的值;print func(i),打印调用某函数的返回值。

      (6)step,单步执行;next, 单步执行不进入函数;continue,继续运行至下一个断点。

      (7)set variable i=7,设置变量的值。

       (8)clear line-num,删除指定的断点,使用delete删除所有的断点。

       (9)whatis i/whatis function-name,查看制定变量的数据类型或者函数的类型。type = int/ type = int (void)

附1 更多gdb命令

backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) 
breakpoint 在程序中设置一个断点 
cd 改变当前工作目录 
clear 删除刚才停止处的断点 
commands 命中断点时,列出将要执行的命令 
continue 从断点开始继续执行 
delete 删除一个断点或监测点;也可与其他命令一起使用 
display 程序停止时显示变量和表达时 
down 下移栈帧,使得另一个函数成为当前函数 
frame 选择下一条continue命令的帧 
info 显示与该程序有关的各种信息 
jump 在源程序中的另一点开始运行 
kill 异常终止在gdb 控制下运行的程序 
list 列出相应于正在执行的程序的原文件内容 
next 执行下一个源程序行,从而执行其整体中的一个函数 
print 显示变量或表达式的值 
pwd 显示当前工作目录 
pype 显示一个数据结构(如一个结构或C++类)的内容 
quit 退出gdb 
reverse-search 在源文件中反向搜索正规表达式 
run 执行该程序 
search 在源文件中搜索正规表达式 
set variable 给变量赋值 
signal 将一个信号发送到正在运行的进程 
step 执行下一个源程序行,必要时进入下一个函数 
undisplay display命令的反命令,不要显示表达式 
until 结束当前循环 
up 上移栈帧,使另一函数成为当前函数 
watch 在程序中设置一个监测点(即数据断点) 
whatis 显示变量或函数类型 


附2 查看和修改程序通用寄存器

有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字: 
l $pc : 程序计数器 
l $fp : 帧指针(当前堆栈帧) 
l $sp : 栈指针 
l $ps : 处理器状态 

使用print $pc打印各寄存器的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值