gdb 拾穗

1,跳过某个特定信号

(gdb) handle SIGPIPE nostop noprint pass

2,break在特定的系统调用处

(gdb) catch syscall 3

3,遇到一个断点的时候执行一组commands

(gdb) commands 1   #在断点1出现的时候执行下面一组命令

> where

> continue

> end

(gdb)

4,遍历某个数据结构

set $i=0

while $i<6

 set $p=XX->list

 set $q=$p->next

 set $n=0

 while $p!=$q

  set $n=$n+1

  set $q=$q->next

  end

 p $n

 set $i = $i + 1

 end

 例2

gdb> set $x=1
gdb > set $addr=0x111120
gdb > while $x < 168
> x/32ag $addr
> set $x = $x + 1
> set $addr = *($addr)
> echo "--- "
> end
gdb > 
 
5,watch一块内存:watch *0xb424200
 
6,disassemble/disass 查看当前指令处的汇编代码

7,demangle 查看某变量的C++原始类名:

(gdb) demangle _ZTVN6apsara5pangu19NormalFileChunkInfoE

vtable for apsara::pangu::NormalFileChunkInfo

8,

查看宏的值:

(gdb) info macro MACRO_NAME

展开宏:

(gdb) macro expand MACRO_NAME

9,

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

查看当前栈桢的信息:Info frame

查看所有集群器信息:info registers

rsp  栈指针,指向栈顶

rbp 栈桢开始处

Rip 指令寄存器

rax  返回值

调用者的寄存器: %rbx, %rbp, %r12, %r13, %r14, %r15

被调用者的寄存器: %rdi, %rsi, %rdx, %rcx, %r8, %r9

参考:

1,http://web.cecs.pdx.edu/~jrb/cs201/lectures/handouts/gdbcomm.txt

原文地址:https://www.cnblogs.com/cobbliu/p/7337428.html