gdb使用大全

        当我们在linux中使用gcc编译器出来的可执行程序时,有的时候对程序的执行过程以及变量的值不明确的时候,此时只能够修改源代码,使用输出的时候显的很不方便。每次修改都需要编译、链接等。就是缺少一些帮助我们调试的工具,那么本文主要介绍的就是gdb这个调试工具的使用,希望对大家有所帮助,有不足的地方还请补充和改正。

         gdb中的命令主要分为以下几类:工作环境相关命令、设置断点与恢复命令、源代码查看命令、查看运行数据相关命令及修改运行参数命令。

一、工作环境相关的命令

命 令 格 式

含义

set args运行时的参数

指定运行时参数,如:set args 2

show args

查看设置好的运行参数

path dir

设定程序的运行路径

show paths

查看程序的运行路径

set enVironment var [=value]

设置环境

show enVironment [var]

查看环境变量

cd dir

进入到dir目录,相当于shell中的cd命令

pwd

显示当前工作目录

shell command

运行shell的command命令

二、设置断点与恢复命令

命 令 格 式

含义

bnfo b

查看所设断点

break 行号或函数名 <条件表达式>

设置断点

tbreak 行号或函数名 <条件表达式>

设置临时断点,到达后被自动删除

delete [断点号]

删除指定断点,其断点号为”info b”中的第一栏。若缺省断点号则删除所有断点

disable [断点号]]

停止指定断点,使用”info b”仍能查看此断点。同delete一样,省断点号则停止所有断点

enable [断点号]

激活指定断点,即激活被disable停止的断点

condition [断点号] <条件表达式>

修改对应断点的条件

ignore [断点号]<num>

在程序执行中,忽略对应断点num次

step

单步恢复程序运行,且进入函数调用

next

单步恢复程序运行,但不进入函数调用

finish

运行程序,直到当前函数完成返回

c

继续执行函数,直到函数结束或遇到新的断点

三、gdb中源码查看的命令

命 令 格 式

含义

list <行号>|<函数名>

查看指定位置代码

file [文件名]

加载指定文件

forward-search 正则表达式

源代码前向搜索

reverse-search 正则表达式

源代码后向搜索

dir dir

停止路径名

show directories

显示定义了的源文件搜索路径

info line

显示加载到Gdb内存中的代码

四、gdb中查看运行数据相关的命令

命 令 格 式

含义

print 表达式|变量

查看程序运行时对应表达式和变量的值

x <n/f/u>

查看内存变量内容。其中n为整数表示显示内存的长度,f表示显示的格式,u表示从当前地址往后请求显示的字节数

display 表达式

设定在单步运行或其他情况中,自动显示的对应表达式的内容

下面重点对于内存数据的查看做一个简单的介绍:

格式:x /nfu 

说明: x 是检查的意思 、n表示要显示的内存单元的个数 、f表示显示方式

(1) f的取值如下所示:

x         按十六进制格式显示变量。
d         按十进制格式显示变量。
u         按十进制格式显示无符号整型。
o         按八进制格式显示变量。
t          按二进制格式显示变量。
a         按十六进制格式显示变量。
i          指令地址格式
c         按字符格式显示变量。
f          按浮点数格式显示变量。

(2) u的取值如下:

        b        表示单字节,
        h        表示双字节,
        w        表示四字节,
        g        表示八字节
例如:对于某一个程序,我们传递的第一个参数是字符串hellod ,函数调用默认使用a0寄存器指向字符串的首地址,保存到内存中 。
查看寄存器的值:info register 
很明显的里看出来,a0中存放的是十六进制的0000 7fff ffff 3672 
此时我们查看该地址中的值。

以上分别显示20个从内存地址0x0000 7fff ffff 3672开始的以十六进制和字符格式显示的单字节数据。很明显按找字符显示的可以直接看出存储的字符串是什么。

注意:对于内存的存储是有大小端的问题,字符串一般都是以'\0'结束的,而'\0'对于的ascii是0。此时我使用的机器是mips的,所以以小端方式存储数据,也就是低地址存放低字节;

        大端(EB)是高地址对应的低字节,低地址对应高字节;

        小端(EL)是低地址对应低字节,高地址对应高字节;

        这两种方式,不管是从内存到寄存器取数据,还是从寄存器往内存存数据都是一样的,只能使用一种方式。

 五、gdb中修改运行参数相关的命令

Gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set 变量=设定值”。这样,在此之后,程序就会按照该设定的值运行了。 

注意:在使用gdb调试的时候,编译生成的可执行程序时一定要加入"-g"参数,才能够调试。设置好断点后,程序就会执行到断点处停止,对于变量、寄存器中的内容都是可以查看的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值