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 "---\n"
> 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
10, 查看某个类型内的变量
gdb) ptype <class_name>
11, 查看某个类型内的成员变量的offset
gdb) p &((IORequest *)0)->pending_