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 "---\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_
總結
- 上一篇: linux多线程信号总结
- 下一篇: 空指针赋值崩溃