gdb命令总结

 


gdb 中可以使用 Linux 中的 shell 命令,需要使用 gdb 中的 shell 命令实现 ,使用方法如下:
shell <command string>

u 直接执行到那一行,在循环当中,if I==3000,可以停止到这里。
b 892 if i==5530
u 892 if i==5530
编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main
gdb中命令:
回车键:重复上一命令
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
(gdb)start:单步执行,运行程序,停在第一执行语句
(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
(gdb)set:设置变量的值
(gdb)next:单步调试(逐过程,函数直接执行),简写n
(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s
(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt
(gdb)frame:切换函数的栈帧,简写f
(gdb)info:查看函数内部局部变量的数值,简写i
(gdb)finish:结束当前函数,返回到函数调用点
(gdb)continue:继续运行,简写c
(gdb)print:打印值及地址,简写p
(gdb)quit:退出gdb,简写q
(gdb)break+num:在第num行设置断点,简写b
(gdb)info breakpoints:查看当前设置的所有断点
(gdb)delete breakpoints num:删除第num个断点,简写d
(gdb)display:追踪查看具体变量值
(gdb)undisplay:取消追踪观察变量
(gdb)watch:被设置观察点的变量发生修改时,打印显示
(gdb)i watch:显示观察点
(gdb)enable breakpoints:启用断点
(gdb)disable breakpoints:禁用断点
(gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元
(gdb)run argv[1] argv[2]:调试时命令行传参
(gdb)set follow-fork-mode child#Makefile项目管理:选择跟踪父子进程(fork())
core文件:先用$ ulimit -c 1024 开启core,当程序出错会自动生成core文件。调试时 gdb a.out core
假设要从当前位置(main.c, ln 18)跳到 main.c, ln 21,忽略中间的 main.c, ln 19 ~ ln 20,可以这样做:(jump 缩写是 j)
(gdb) b 21
(gdb) j 21
在 (gdb) c 之后,gdb 会跳过 ln 19 ~ ln 20,停在 ln 21
100个gdb技巧
https://wizardforcel.gitbooks.io/100-gdb-tips/content/step-and-next-function.html


gdb ./asr_demo
r parameter1 parameter2

gdb --args ./asr_demo parameter1 parameter2


如何gdb到fork的子进程
gdb gs_dump
set follow-fork-mode child
set detach-on-fork off
set args wxy -p 7432 -F d -f 2 -j 2
b pg_fe_sendauth
r

 
如何gdb到fork的子进程
1.set follow-fork-mode  
这条命令可以用于在调试父进程或是子进程的模式之间进行切换。例如在fork函数执行之前执行set follow-fork-mode child, 当fork执行后,设定在子进程上的断点将会有效,而父进程上的断点此时无效;反之依然。缺省gdb是调试主进程的。
 
2.attach
GDB有附着(attach)到正在运行的进程的功能,即attach 命令。因此我们可以利用该命令attach到子进程然后进行调试。

查看所有的局部变量 info locals
修改某个变量值 set var=1



查看core路径
sysctl -a|grep core_pattern
cat /proc/sys/kernel/core_pattern

触发coredump文件生成的方法是:

kill -11 <pid of a process>



清空某用户名下文件

ll -t|grep wxy

 ll -t|grep wxy | awk '{print $9}' | xargs rm

ll -t|grep wxy

解压
lz4 -d core-*-bbox.lz4

查看
gdb gaussdb core
bt

华为opengauss gstrace

 

启动trace
gstrace start -p 207787
停止trace
gstarce stop -p 207787
查看trace配置
gstrace config -p 207787
dump trace
gstrace dump -p 207787 -o /data/207787.dump
解析dump detail信息
gstrace detail -f /data/207787.dump -o /data/207787.detail
解析dump codepath
gstrace codepath -f /data/207787.dump -o /data/207787.codepath
分析全局性能
gstrace analyze -f /data/207787.dump -o /data/207787.perf
分析分片性能
gstrace analyze -f /data/207787.dump -o /data/207787.perf -t 1

 

 

针对进程老是被SIGTRAP等信号打断的问题

可以通过以下设置进行屏蔽

handle SIGUSR2 nostop noprint
handle SIGUSR1 nostop noprint

 

 

gdb 查看宏定义

info macro XXX

posted @ 2021-03-09 15:15  aaronwell  阅读(824)  评论(0)    收藏  举报