IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux】快速入门gdb调试工具 -> 正文阅读

[系统运维]【Linux】快速入门gdb调试工具

前言

在VS系列的IDE中,我们习惯于图形化窗口的调试;而在linux的命令行下,我们则借助gdb这个工具来完成程序的调试

阅读完本文,你将了解:

  • 显示代码
  • 打断点、跳转到断点
  • 逐过程执行
  • 逐语句执行
  • 长显示变量信息
  • 跳转到指定行
  • 禁用断点
  • 调试时更改变量

1.如何将源码编译成可调试的二进制文件

我们以前在编译一个C语言源文件mytest.c时,通常使用这条指令:

gcc mytest.c -o mytest

顺利生成了可执行文件mytest

如果我们直接使用gdb调试这个可执行文件,会发现没有调试信息:
在这里插入图片描述
这是为什么呢?

Linux中程序默认编译的时候

  • 默认生成的可执行程序是release版本的,不可调式

所以

  • 需要调试,gcc编译时需要加 -g 参数,以debug方式发布程序,使得可执行文件带有调试信息–>才可以被gdb追踪,调试,即:
gcc mytest.c -o mytest_debug -g

在这里插入图片描述
我们还可以发现的是,debug版本的可执行文件比release版本的大一些,这就是因为添加了调试信息
在这里插入图片描述

2.开始调试

首先给一下源文件:

#include <stdio.h>
int sum(int top) {

        int _sum = 0;
        int i = 0;
        for(;i <= top; i++) {
                _sum += i;
        }
        return _sum;
}
int main() {
        int max = 0;
        printf("please enter your data# ");
        scanf("%d",&max);
        int _sum = sum(max);
        printf("1:%d\n", _sum);
        printf("2:%d\n", _sum);
        printf("3:%d\n", _sum);
        printf("4:%d\n", _sum);
        printf("5:%d\n", _sum);
        printf("6:%d\n", _sum);
        return 0;
}

我们先编译生成带调试信息的可执行文件

gcc mytest.c -o mytest_debug -g

然后gdb调试:

gdb mytest_debug
命令作用
list/l显示源代码(一次10行)
run/r运行程序
next/n逐过程执行
step/s逐语句执行,可进入函数内
break/b 行号在某一行设置断点
info break查看断点信息
finish执行到当前函数返回
print/p打印表达式的值
set var修改变量的值
continue跳到下一个断点
delete breakpoints删除所有断点
delete breakpoints n删除序号为n的断点
disable breakpoints n取消对序号为n的断点的追踪
enable breakpoints n恢复对序号为n的断点的追踪
info breakpoints打印设置的断点
display 变量名长显示某变量
undisplay变量名取消对某变量的长显示
until 行号跳至某行
quit/q退出gdb

下面演示常用命令

2.1 显示代码 l

list/l 行号

显示源代码,一次显示10行,再按回车会接着往下显示
在这里插入图片描述

2.2 运行程序 r

我们开始调试,也就是要运行程序:

run/r

在这里插入图片描述
我们发现,r之后,代码直接执行到了第14行的输入语句,并且输入之后程序直接结束,根本没有进行调试。原因是因为我们没有设置断点,如果设置了断点,r将会执行到第一个断点处停止,这样我们就能进行单步调试。

2.3 设置、查看断点

b 行号 //设置断点
info b //查看断点

我们在14、15、19行设置了断点
在这里插入图片描述

2.4 next单步逐过程调试

我们继续r执行程序,再n单步执行

n

发现n没有让我们进入函数体内,这说明了n是逐过程调试
在这里插入图片描述

2.5 step逐语句调试

我们用s进入函数体内
在这里插入图片描述

2.6 finish执行到当前函数返回停下

finish

在这里插入图片描述

2.7 c跳到下一个断点

c

在这里插入图片描述

2.8 dispaly 长显示变量

display 变量名
undisplay 变量序号

注意undisolay的是变量前面的序号
在这里插入图片描述

2.9 打印表达式的值 p

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:33:29  更:2022-02-16 13:33:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:45:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码