gdb调试

gdb及调试排查

gdb使用

抓所有线程

thread apply all b squid_srv_do_write
thread apply ID1 ID2 command

gdb调试 fork程序 设置跟踪

默认情况下gdb是跟踪父进程的。
set follow-fork-mode child 命令设置gdb在fork之后跟踪子进程。
set follow-fork-mode parent设置跟踪父进程。

  • 参考链接: gdb调试 fork程序 设置跟踪

watch监控数据

# 监控数据
p &httpState->orig_request->body_reader
watch (BODY_HANDLER *) 0x13df6260

显示完整的字符串

set print elements 0

忽略中断信号

handle SIGPIPE nostop noprint

条件抓取数据

set logging file /tmp/gdbout.txt
set logging on
handle SIGPIPE nostop noprint
b clientProcessRequest
commands
p http->log_uri
c
end
b clientProcessRequest2
commands
p http->uri
c
end
b pconnPush if strcmp(host, fd_table[fd].ipaddr) && fd_table[fd].uses==1 && (host[0] >= '0' && host[1] <= '9')
commands
p fd_table[fd].ipaddr
p req->forward_url
p req->host
p req->x_req_id
p current_dtime
bt
gcore
p recover_debug_options()
c
end
c

pid=ps -ef | grep xxx | awk '{print $2}'
gdb -batch -p $pid -x /tmp/g

放 ~ 目录, gdb 执行 source ~/ppp

forcus同时跟踪代码

forcus可以同时查看执行的具体代码行

你可能感兴趣的:(gdb调试)