GDB命令小记

来源:互联网 发布:php html字符转义 编辑:程序博客网 时间:2024/06/05 14:22

1.ptype显示变量,函数的类型,以及新类型的原型,比如tcpdump中,bpf_u_int32的type为unsigned int

2.GDB会自动跳过没有初始化的变量定义语句,如

int a;double b;

3.GDB中,不输入任何东西,按回车,默认执行上一条命令,利用这点,我们不用反复输入同一条指令,在单步调试的时候非常有用,只用输入一次next,然后不断的按回车即可

4.使用如下命令查看宏定义

info macro macro-name

5.gdb支持反向调试,可以使用record命令,开始记录调试状态变化信息,然后可以用如下一些命令,实现相应程度的倒退。用record stop命令终止记录调试状态变化信息。

reverse-continue ('rc') -- Continue program being debugged but run it in reversereverse-finish -- Execute backward until just before the selected stack frame is calledreverse-next ('rn') -- Step program backward, proceeding through subroutine calls.reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source linereverse-stepi -- Step backward exactly one instructionset exec-direction (forward/reverse) -- Set direction of execution.

6.gdb可以利用shell执行外部命令,比如以下命令就会清屏

shell clear

同样也可以利用Ctrl+L清屏

7.有时候需要查看寄存器的值,可以利用info命令

info registers还可以简写为i r

查看寄存器我们还可以利用print命令

print $eax

利用info命令,我们还可以查看很多信息,欲知详情,请help info

8.显示命令行参数

show args

9.在调试循环,或者非常复杂函数的时候,我们可能会感到厌倦,想要跳出该循环或函数,可以使用下面的命令

until 跳出当前循环,对for循环,while循环都适用finish 跳出当前函数

10.分割窗口,显示源码,反汇编代码,寄存器当前状态

layout srclayout asmlayout regs

取消分屏显示先按组合键Ctrl+x 然后单独按a
Ctrl+x a

11.查看某个内存地址的内容

x Address

12.查看进程堆栈

btbt full(显示局部变量等信息)

13.修改变量的值

set varible a=100或 set var a=100或 print a=100

print和set唯一的区别就是会回显变量修改后的值

还可以利用地址修改变量的值

比如

set {unsigned int}0x127841284=7
前提是这个地址必须是可写的,另外命令中是大括号