1、背景
1、程序的发布方式有两种,debug模式和release模式
2、Linux gcc/g++出来的二进制程序,默认是release模式
3、要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
2、使用gdb
2.1 生成debug版本
我们先来写一段C语言代码:
#include <stdio.h>
int main()
{
int i = 0;
for(i = 0; i < 5; i++)
{
printf("hello linux!\n");
}
return 0;
}
这里我们正常再编写一个Makefile文件,用于自动化构建,我们要还是正常的编写生成的可执行文件就是release版本,但是在gcc编译代码的时候加上 -g 选项,这样生成的就是debug版本的可执行程序了。
此时我们生成的就是debug版本的可执行文件。
2.2 进入gdb
gdb test_debug //gdb 可执行程序名
2.3 显示源代码
list / l 行号:显示 binFile 源代码,接着上次的位置往下列,每次列 10 行。 list / l
函数名:列出某个函数的源代码。
list n // 将第n行放在输出的十行中间输出出来
list 函数名 // 从函数名开始打印10行出来
这里 list 可以简写为 l 使用。
2.4 运行程序/开始调试
r或run:运行程序。
如果存在断点,就会跳转到断点行,这就是调试。
2.5 打断点,查看断点信息
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
b 行号 // 在某一行打断点
info break :查看断点信息
2.6 删除断点
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
d // delete简写,直接d是删除所有断点
d Num // 删除编号为Num的断点
这里我们可以发现,在一次调试的周期中,断点被创建出来再被删除,然后再去创建断点,断点序号是线性递增的的,不是删掉后重新按连续的升序去排。
2.7 断电的禁用、启用
disable breakpoints:禁用断点
enable breakpoints:启用断点
2.8 逐语句执行
s或step:进入函数调用
2.9 逐过程执行
n 或 next:单条执行(不进入函数调用)
2.10 跟踪变量
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的所有变量的跟踪
undisplay n:取消对先前设置的编号为n的变量的跟踪
2.11 跳转到X行
until X行号:跳至X行
2.12 跳转到下一个断点
continue(或c):从当前位置开始连续而非单步执行程序
2.13 运行完整个指定函数
finish:执行到当前函数返回,然后挺下来等待命令
2.14 查看调用堆栈
breaktrace(或bt):查看各级函数调用及参数
当我们主函数中调用了其他函数,我们使用bt命令就能看到所调用的堆栈:
我们这次又写了一个func函数,并且进入到func函数中,查看调用的堆栈,然后再跑完func函数,再次查看调回用的堆栈,bt命令可以完整的看到堆栈调用的情况。
2.15 设置变量的值
set var 变量名 = val // 将某变量的值设置为val文章来源:https://www.toymoban.com/news/detail-742596.html
用处:在处理判断逻辑出问题的时候使用。文章来源地址https://www.toymoban.com/news/detail-742596.html
到了这里,关于[Linux] Linux代码调试器 -- gdb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!