GDB调试
Created At :
Views 👀 :
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html
对多线程的支持
set follow-fork-mode [parent|child]
set detach-on-fork [on|off]
| follow-fork-mode |
detach-on-fork |
说明 |
| parent |
on |
只调试主进程 |
| child |
on |
只调试子进程 |
| parent |
off |
同时调试父子进程, gdb跟踪父进程, 子进程阻塞在fork位置 |
| child |
off |
同上 gdb跟踪子进程, 父进程阻塞 |
进程间切换
| 命令 |
功能 |
| info inferiors |
查询正在调试的进程 |
inferior <number> |
切换进程 |
栈相关
| 命令 |
功能 |
| up/down |
改变堆栈的显示深度 |
| info stack |
查看所有栈的信息 |
| backtrace |
缩写bt 同上 |
| info frame |
显示当前栈的详细信息 |
| frame |
缩写是f 显示当前栈的简单信息 |
| frame n |
切换到 第n层栈 |
| 运行命令 |
缩写 |
功能 |
| run |
r |
运行程序 |
| continue |
c |
继续执行到下有一个断点处 |
| next |
n |
单步跟踪, 不进入函数 |
| step |
s |
会进入函数 |
| until |
|
运行程序直到退出循环体 |
| until + 行号 |
|
运行至某行 |
| finish |
|
运行程序, 直到当前函数完成返回, 并打印函数返回时的堆栈地址和返回以及参数等信息 |
| call 函数(参数) |
|
调试程序中的可见参数, 并传递参数 |
| quit |
q |
退出 |
| 设置断点 |
缩写 |
功能 |
| break n |
b n |
在第n行设置断点, b xx.cpp:500(xx.cpp文件第500行) |
| b f if a>b |
|
在函数f 设置条件断点 |
| b n if a>b |
|
在行号n 设置条件断点 |
| break func |
b func |
在函数func()的入口处设置断点 |
| delete 断点号n |
|
删除第n个断点 |
| disable 断点号n |
|
暂停第n个断点 |
| enable 断点号n |
|
开始第n的断点 |
| clear 行号n |
|
清除第n行的断点 |
| info b |
|
显示断点设置情况 |
| delete breakpoints |
|
清除所有断点 |
| 查看源代码 |
缩写 |
功能 |
| list |
l |
默认显示10行 |
| list 行号 |
|
以行号为中心的前后十行代码 |
| list 函数名 |
|
列出函数名所在函数的代码 |
| list |
|
不带参数, 接着上一次的list命令输出下边的内容 |
| 打印表达式 |
功能 |
| print p |
|
| p a |
显示a的值 |
| p ++a |
a的值 |
| p func(22) |
以整数22作为参数调用 后打印 |
| p func(a) |
将变量a作为参数 |
| display 表达式 |
每次单步运行后就打印表达式的值 |
| watch 表达式 |
设置检视点, 一旦被监视的表达式值改变就强行终止正在被调试的程序 |
| whatis |
查询变量或函数 |
| info function |
查询函数 |
| info local |
显示当前堆栈页的所有变量 |
| 查询运行信息 |
功能 |
| where/bt |
当前运行的堆栈列表 |
| bt backtrace |
显示当前的调用堆栈 |
| set args [args] |
指定程序运行参数 |
| show args |
查看程序参数 |
| info program |
查看程序是否运行, 进程号, 被暂停原因 |
安装DebugInfo
cat /etc/yum.repos.d/CentOS-Debug.repo
[debug]
name=CentOS-$releasever - DebugInfo
baseurl=http://debuginfo.centos.org/$releasever/$basearch/
gpgcheck=0
enabled=1 # 重点是这个
protect=1
priority=1
安装 kernel-debuginfo
yum --enablerepo=base-debug install -y kernel-debuginfo-$(uname -r)
安装glibc, 提示缺少其他的也是如此安装
debuginfo-install glibc