在这里插入图片描述

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 运行程序/开始调试

rrun运行程序

在这里插入图片描述

如果存在断点,就会跳转断点行,这就是调试

在这里插入图片描述

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://blog.csdn.net/Ljy_cx_21_4_3/article/details/134191255

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14869.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注