gdb调试命令

由于面试原因我特意总结一下gdb的用法,以免下次吃亏.

参数:

f     xxx    导入文件

b    number  设断点

r    运行

n 执行一行

s    进入函数内部执行一小行

l     显示代码

si ni:汇编层用的调试命令,用法和上面的n和s一样

info break 显示断点

info threads 显示当前所有的线程信息

thread number 切换线程

d    number  删除number号断点

c     继续运行到下一个断点

bt    打印函数调用栈(可以用于查看死锁)

thread apply all bt  打印所有线程的栈

i registers 打印所有寄存器

disassemble 反编译

查看内存里面的内容:

格式:x/<n/f/u> <addr>

n、f、u、i是可选的参数,<addr>表示一个内存地址

1) n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容

2) f 表示显示的格式

3) u 表示将多少个字节作为一个值取出来,如果不指定的话,GDB默认是4个bytes,如果不指定的话,默认是4个bytes。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

4)i  把内存中的指令翻译成汇编,汇编级别的调试才能用上。

 

参数 f 的可选值:

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。

f 按浮点数格式显示变量。

s 按字符串格式显示变量。

 

参数 u 可以用下面的字符来代替:

b 表示单字节

h 表示双字节

w 表示四字 节

g 表示八字节

 

特殊用法:

1.条件断点。b line if xxx == yyy //当xxx == yyy时候触发第line行的断点。

 

例如:

(gdb) p record
$10 = {12, 76, 48, 62, 94, 17, 32, 37, 52, 69}
(gdb) p &record
$11 = (int (*)[10]) 0x8049740
(gdb) x/4uw 0x8049740
0x8049740 <record>:    12    76    48    62
(gdb) x/6ow 0x8049740
0x8049740 <record>:    014    0114    060    076
0x8049750 <record+16>:    0136    021

设置条件断点:

(gdb) b 13 if i == 8

Breakpoint 1 at 0x80483fa: filegdb_condition.c, line 13.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值