【Linux】调试器-gdb使用

大家好,我是苏貝,本篇博客带大家了解Linux的编译器-gcc/g++,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • 1. 背景
    • (A) 看大小
    • (B) 查看ELF格式的文件
  • 2.使用
    • (A) 进入gdb
    • (B) quit/q:退出gdb
    • (C) run/r:运行代码
    • (D) list/l:查看debug模式的可执行文件的依赖文件的内容
    • (E) b:打断点
    • (F) info/i b:显示断点信息
    • (G) disable 断点编号:使能关闭断点
    • (H) enable 断点编号:使能打开断点
    • (I) d/d 断点编号:删除断点
    • (J) next/n:逐过程,F10
    • (K) step/s:逐语句,F11
    • (L) print/p a/&a:查看变量a内容/地址
    • (M) display a/&a:一直查看变量a的值/地址
    • (N) undisplay 编号:取消对a/&a的一直查看
    • (O) continue/c:运行到下一个断点处
    • (P) 运行结束所在函数后就停下来
    • (Q) until:跳转到指定行,中间的代码都已执行
    • (R)info/I locals:查看当前栈帧局部变量的值

1. 背景

程序的发布方式有两种,debug模式和release模式 。其中,debug模式可被调试(编译器形成可执行程序的时候会给可执行程序 添加调试信息, release模式不能被调试
Linux 中gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

如何证明由release变debug模式会添加调试信息呢?

(A) 看大小

先写出一个.c文件
在这里插入图片描述

再写出makefile的内容
在这里插入图片描述

Make生成mytest文件,它是可执行文件,是release模式的
在这里插入图片描述

修改makefile的内容

在这里插入图片描述

再生成mytest_debug文件,也是可执行文件,不过是debug模式的
在这里插入图片描述

我们发现,debug模式的文件大小大于release模式的

(B) 查看ELF格式的文件

readelf 命令,一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库( * .so)或者静态库(*.a) 等包含ELF格式的文件。

在这里插入图片描述

Debug模式下比Release模式下多出了上图的可执行文件

以上2点可大体证明由release变debug模式会添加调试信息


2.使用

(A) 进入gdb

gdb +文件名,只有出现done才表示已经进入调试
在这里插入图片描述

(B) quit/q:退出gdb

在这里插入图片描述

© run/r:运行代码

(D) list/l:查看debug模式的可执行文件的依赖文件的内容

默认只显示10行
如果在进入调试并且操作后,在命令行直接按enter键,那么gdb执行的是上一条指令(例外:当上一条指令是list/l时,会打印出上一条指令下面的未打印的代码)

使用方式:

  1. list/l:将main函数作为中间,显示main函数的上下文
    在这里插入图片描述

  2. list/l 文件名:行号/函数名
    在这里插入图片描述
    在这里插入图片描述

  3. list/l 行号/函数名
    在这里插入图片描述

上面的3种方法都可以打印文件内容,可是我们发现代码大于10行,如何打印全部的代码呢?直接按enter键
在这里插入图片描述

当代码全部打印完后,再想打印就会跳出提示

(E) b:打断点

使用方法:

  1. b 行号/函数名
    在这里插入图片描述

  2. b 文件名:行号/函数名
    在这里插入图片描述

断点的作用:在run/r时,停在断点哪一行
在这里插入图片描述

注意:断点编号只会一直递增
如果我先删除编号为1的断点,即31行的断点,再在31行打断点,此时断电编号为5而非1

(F) info/i b:显示断点信息

在这里插入图片描述

断点信息:
Num:断点编号
Enb:使能,表示断电是否打开,y:打开,n:关闭

(G) disable 断点编号:使能关闭断点

未关闭断点2时,run/r停在第29行。关闭断点2,则停在31行
在这里插入图片描述

(H) enable 断点编号:使能打开断点

在这里插入图片描述

(I) d/d 断点编号:删除断点

d:删除所有的断点
d 断点编号:删除指定断点
在这里插入图片描述

(J) next/n:逐过程,F10

会一行一行的执行,如果遇到函数,则不进入函数,直接执行完函数

(K) step/s:逐语句,F11

会一行一行的执行,如果遇到函数,则进入函数

(L) print/p a/&a:查看变量a内容/地址

当我们用vs调试时,遇见循环时,能一边看着代码,一边看着变量的值/地址,Linux也可以实现
在这里插入图片描述
在这里插入图片描述

(M) display a/&a:一直查看变量a的值/地址

在上面的print/p命令中,想要知道每次循环时a/&a,就要在每次循环时print/p a/&a,很麻烦,且没有必要,所以出现了display,只要display a/&a,在每次循环时,自动出现a/&a

在这里插入图片描述

(N) undisplay 编号:取消对a/&a的一直查看

在这里插入图片描述

(O) continue/c:运行到下一个断点处

在这里插入图片描述

§ 运行结束所在函数后就停下来

在这里插入图片描述

(Q) until:跳转到指定行,中间的代码都已执行

在这里插入图片描述

(R)info/I locals:查看当前栈帧局部变量的值

在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flink优化案例

文章目录 一、flink join维表案例二、flink 双流join案例三、总结 提示:以下是本篇文章正文内容,下面案例可供参考(适用于flink1.13) 一、flink join维表案例 背景:flink sql join 维表。job业务不复杂,job写入性能比较差。维表数据大约每天…

想半天憋不出几个字?试试AI扩写

大家在写文章时是否也经常这样?想了半天,结果只能写出几个字,但是要求往往又是几百多个字,那么有没有啥工具可以帮我们在原文的基础上扩写一下文章字数,让我们达到字数要求呢? 下面给大家介绍一下如何扩写文…

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版 Office LTSC 2024 for Mac 请访问原文链接:Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版,查看最新版。原创作品,转载请保留出处。 作者主页&a…

FullCalendar日历组件集成实战(2)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

Ubuntu安装cmake

在软件开发的世界中,构建系统扮演着至关重要的角色,它们确保代码能够正确、高效地编译和链接。CMake就是这样一个强大的跨平台自动化构建系统,它被广泛用于各种大型项目中。对于Ubuntu用户来说,安装CMake非常简单,而且…

kubeadm 在vubuntu22.04.4 server 上安装kubernetes 1.28.9

一、基础安装(所有节点执行)---------------------------------------- 时间同步 关闭防火墙 sudo ufw disable sudo ufw status关闭交换内存 临时关闭 sudo swapoff -a free -m永久关闭 sudo vim /etc/fstab 注释掉交换内存 转发 IPv4 并让 iptab…

鸿蒙ArkUI开发:常用布局【交叉轴】

交叉轴 垂直于主轴方向的轴线。Row容器交叉轴为纵向,Column容器交叉轴为横向。通过alignItems属性设置子元素在交叉轴(排列方向的垂直方向)上的对齐方式alignSelf属性用于控制单个子元素在容器交叉轴上的对齐方式,其优先级高于al…

4.分支与循环

逻辑控制分为三部分: 1.顺序结构---》顺序执行代码 2.分支结构---》if语句和switch语句 3.循环执行---》for语句 while语句 和do while语句 顺序结构比较简单,按照代码书写的顺序一行一行执行 分支结构(if、switch语句) 也就是…

深度学习之神经网络理论基础

深度学习之神经网络理论基础 人工神经元 人工神经元:人类神经元中抽象出来的数学模型 MP模型 mp模型:1943年心理学家W.S.McCulloch和数理逻辑学家W.Pitts研究出人工神经元,称为M-P模型。 M-P神经元(一个用来模拟生物行为的数学模…

Chromium 调试指南2024 Windows11篇-Visual Studio 2022启用子进程调试插件(六)

1. 前言 在Chromium项目的开发过程中,构建、运行和调试是至关重要的步骤。本文将介绍如何使用Visual Studio 2022打开Chromium项目、启用子进程调试插件、以及编译Chromium项目的流程。通过这些步骤,我们将能够更加顺利地进行Chromium项目的开发和调试工…

深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重…

初识FlaskMySQL实现前后端通信 全栈开发之路——后端篇(1)

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

拥有一台服务器可以做哪些有趣又实用的事情?

在接触云服务器这个概念你以前,你是不是在想: 可能是,云服务器,这个产品的存在,它可以为你做些什么实用的事情吗? 或者是,云服务器这个看似高大上的科技产品,其实可以为我们的生活…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好,我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY,为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话,欢迎分享转发! 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可,新用户可免费…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑协变量因素的多能微电网两阶段分布鲁棒优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

ARM架构安全特性之标准安全 API

安全之安全(security)博客目录导读 目录 一、机密计算软件 二、Arm机密计算固件架构 三、认证校验 四、Veraison项目 五、独立于语言的安全API 六、平台抽象安全项目(Platform AbstRaction for SECurity project) 七、可移植平台安全API 八、…

黄仁勋炉边对话:创业的超能力与英伟达的加速计算之旅

在TiECon 2024大会上,英伟达的创始人兼CEO黄仁勋与风投公司Mayfield的管理合伙人纳文查德哈进行了一场深入的炉边对话。黄仁勋不仅分享了英伟达的创业故事,还谈到了他对创业和加速计算的深刻见解。下面是我对这次对话的总结,希望能给正在创业…

10.nginx模板(开启监控取值页面)

nginx模板(开启监控取值页面) 1.开启监控页面 vim nginx.conflocation /nginx_status {stub_status;} systemctl restart nginx.server网页展示 导入模板&#xff0c;nginx监控模板zbx_nginx_template.xml <?xml version"1.0" encoding"UTF-8"?…

高级查询(子查询)

可以使用的范围&#xff1a; 子查询是一个嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询中的查询。 任何允许使用表达式的地方都可以使用子查询。 子查询也称为内部查询或内部选择&#xff0c;而包含子查询的语句也称为外部查询或外部选择 子查询的特点和优势 可以…

(undone) 什么是马尔可夫链?Markov Chain

参考视频1&#xff1a;https://www.bilibili.com/video/BV1ko4y1P7Zv/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考视频2&#xff1a;https://www.bilibili.com/video/BV1xg4y1K7z4/?spm_id_from333.788&vd_source7a…