在linux 中使用GDB调试程序

1  简介

     越来越多公司开始使用Linux系统作为底层系统,如何进行代码的调试,定位问题成为了一个棘手的问题。而GDB作为该类产品的调试工具,掌握GDB调试成为一个程序员必要的技术。

2 GDB 调试命令

2.1 查看和设置状态

 info args

 显示Gdb调试的程序的状态信息,参数ARGS 用于指定查看的具体状态名。

set  arg s

设置Gdb调试程序和GDB的状态,参数ARGS 用于指定查看的具体状态名。

show  args

显示GDB自己的状态的信息,参数 args 指定查看的具体的状态名。

2.2 取得命令的帮助

help   显示GDB的命令的列表。

help  class 显示指令分类class下的所有命令。

help command 显示指定命令的帮助命令。

info 显示可以用info命令查看的状态。

show 显示可以用show,命令查看的状态。

2.3 中断程序的执行  CTRL+C ,程序被中断后停在随机一个指令上。

2.4 断点 

2.4.1设置断点 

断点用break 来设置,通常用Sbpnum 来记录最近设置的断点数。

BREAK(b) function 

BREAK(b) +offset

BREAK(b) - offset

BREAK(b) linenum

BREAK(b) filename:linenum

BREAK(b) filename:function

BREAK(b) *address

break  在选定的堆栈要执行的下一条指令设置一个断点。

break .....if cond  设置一个有条件的断点,只有满足条件才停止。

info break   查看设置的断点信息。

2.4 .2删除断点

clear  删除选定的堆栈要执行的下一条指令处设置的断点。

clear function 

clear filename: function删除函数入口的断点。

clear llinenum\

clear filename : linenum  删除指定代码行的断点。

delete bnums 删除参数指定数目的断点或检查点。

2.4.3禁用断点

disable bnums

enable bnums

2.4.5 中断条件

condition bnum expression  指定expression  作为第Bnums个断点或检查点的中断条件。

condition bnum 移去第BNUM个断点或检查点的中断条件,使其变成无条件断点。

ignore bnum count 忽略 count   次第BNUMS个断点。

2.4.6 继续与单步执行

  c /step/n 

finish  继续运行到函数返回,并打印函数的返回值。

until(u)可避免step 在循环内的单步执行,一下就到达循环的终点。

3 查看堆栈

每次程序执行函数调用时,都会生成相应的信息,包括调用在程序中的位置,调用参数以及被调用函数的局部变量。这些信息保存在一块叫堆栈框的数据里。堆栈框分配的内存区域叫调用堆栈。

frame args 用来从一个命令移动到另一个命令堆栈框,并打印所选择的堆栈框。args 可以是堆栈框的地址,也可以是堆栈号。

3.1 查看源文件

list linenum 打印当前源文件以linenum为中心的源码。

list function 打印以函数function开头的为中心的源码

list first,last 打印从first到last的源码。

3.2 搜索源文件

forward-search regexp 

search regexp 

reverse-search regexp    在当前源文件里向前(后)与“regexp”匹配的规则表达式。

3.3  查看数据和内存

  3.3.1 查看数据

 print exp 

print /f 

打印格式可以以下几种:

 x 用十六进制形式打印数据。

d 用带符号的十进制形式打印数据。

u 用无符号的十进制打印数据。

O 用八进制形式打印数据。

T 用二进制打印数据。

a 把值打印成地址。

C 用字符常量的形式打印整数。

  f  打印浮点数值。

3.3 修改数据和内存

set *(long  *)address =val;

set variable=val

未完待续,请看下集

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值