C++拓展GDB
This is my study note of GDB.
GDB的概念
GDB,全称 GNU symbolic debugger,简称 GDB调试器,是 Linux 平台下最常用的一款程序调试器。
GDB基本用法
检查GDB版本
1 | gdb -v |
| 命令 | 简写形式 | 说明 |
|---|---|---|
| backtrace | bt、where | 显示backtrace |
| break | b | 设置断点 |
| continue | c、cont | 继续执行 |
| delete | d | 删除断点 |
| finish | 运行到函数结束 | |
| info breakpoints | 显示断点信息 | |
| next | n | 执行下一行 |
| p | 显示表达式 | |
| run | r | 运行程序 |
| step | s | 一次执行一行,包括函数内部 |
| x | 显示内存内容 | |
| until | u | 执行到指定行 |
| 其他命令 | ||
| directory | dir | 插入目录 |
| disable | dis | 禁用断点 |
| down | do | 在当前调用的栈帧中选择要显示的栈帧 |
| edit | e | 编辑文件或者函数 |
| frame | f | 选择要显示的栈帧 |
| forward-search | fo | 向前搜索 |
| generate-core-file | gcore | 生成内核转存储 |
| help | h | 显示帮助一览 |
| info | i | 显示信息 |
| list | l | 显示函数或行 |
| nexti | ni | 执行下一行(以汇编代码为单位) |
| print-object | po | 显示目标信息 |
| sharelibrary | share | 加载共享的符号 |
| stepi | si | 执行下一行 |
启动gdb
1 | ulimit -a |
如果此时显示 core file size(core 文件大小)对应的值为 0,表示当前系统未开启 core dump 功能。
- 此时开启core dump此时,core file size显示unlimited则表示开启成功。
1
ulimit -c unlimited
- 以test.cpp为例,开启
1
gdb test.cpp
断点
- 根据行号设置断点
1
2b 5
b 文件名:行号 - 根据函数设置断点
1
b main
- 根据条件设置断点
1
b 文件名:行号 if 条件
- 根据偏移量设置断点
1
b + 偏移量
- 根据地址设置断点
1
b *地址
- 设置临时断点
1
2临时断点只生效一次
tbreak 文件名:行号 - 显示所有的断点
1
info break
- 删除断点
1
2
3删除某个断点: delete 4
删除全部断点: delete
清除当前行断点 clear
运行
- 运行
1
r 运行程序
- 继续单步调试
1
n
- 继续执行到下一个断点
1
c
查看源码和行号
1 | l |
打印
- 打印变量和指针
1
p 变量名/指针名
- 打印函数中的变量a
1
p 'main'::a
- 打印指针指向的内容
1
p *指针名@长度
- 设置变量
1
2set $index = 0
p a[$index] - 设置打印的格式
1
2
3
4
5
6
7
8
9x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量
p/格式 变量名
cmakelist配置
cmakelist.txt中加入
1 | set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGES} -o0 -g -ggdb") |
同时,编译时:
1 | cmake -DCMAKE_BUILD_TYPE=Debug Path |
dir(断点文件路径)
b 断点文件 断点行号
1 |
|
q
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风声向寂!
评论
ValineDisqus






