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