
 
.
专栏:数据结构|Linux|C语言
路漫漫其修远兮,吾将上下而求索
文章目录
- gdb简单基础指令
- Linux调试器-gdb使用
- 背景
- 调试准备工作
- 写一个简单的`myprocess.c`程序
- makefile程序
- debug模式运行
- 修改后的Makefile程序
 
- 调试(gdb)
- list
- run
- info
- delet
- disable
- enable
- 逐过程和逐语句
- next
- step
 
- 小结
gdb简单基础指令
gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
Linux调试器-gdb使用
背景
程序的发布方式有两种,debug模式和release模式
 Linux gcc/g++出来的二进制程序,默认是release模式
 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
调试准备工作

写一个简单的myprocess.c程序
 

makefile程序

debug 可被调试
release 不可被调试
debug模式运行

在debug的情况下,编译器形成可执行程序的时候,会给可执行程序添加条件信息
gcc/g++默认编译时,采用release模式
gcc/g++ 采用debug模式,- g
修改后的Makefile程序

这时候我们在make一下后就可以生成一个debug版的程序了

因为debug版本带了调试信息,所以debug版本的存储大小略微比relase大,同时因为带了调试信息,所以给用户使用的是relase版本,
输入readelf myprocess-debug就可以查看,读取elf可执行程序

调试(gdb)
默认gdb+
要调试的 可执行程序

输入
quit或者q退出(允许简写)

list
默认10行,gdb会自动记录最近执行的命令,想全部打印,直接回车
 
 会把查找的位置的上下文显示出来,不是从该位置开始
 
run
要调试,首先要先把程序运行起来
 输入r或者run
 
 但是这会直接把程序从开头运行到结束,达不到调试的效果,我们首先要打断点
 用 breakpoint或者简写成b 加上代码行号或者函数可以打上断点
 
info
输入info breakpoint查看断点
 这里info也可以简写成i
 
delet
那么怎么删除断点呢?
 通过d 后面跟对应的编号
 
disable
通过disable 编号关闭断点

 当我们将断点关闭后,再次运行代码直接跑到了第6行,也就是编号3断点处
 
enable
通过enable 编号打开断点
 
逐过程和逐语句
逐语句会进入到函数内部调试
逐过程不会进入函数内部调试,直接到下一行
next
逐过程next
 
 参考vscode编译器的F10快捷键
step
逐语句step
 
参考vscode编译器的F11快捷键
小结

