【Linux取经路】基础开发工具——gdb篇

news2024/10/5 19:13:39

在这里插入图片描述

文章目录

  • 一、背景知识介绍
  • 二、gdb常用指令

一、背景知识介绍

程序的发布方式有两种,Debug模式和release模式。Debug是开发者模式,而用户最终使用的是release。Debug模式下的代码,可以被追踪、调试,因为在Debug模式下形成的可执行程序,里面添加了debug信息。这意味着,以Debug模式下得到的可执行程序,一定比release模式下得到的可执行程序要大。gcc编译器,默认是以release的模式编译得到可执行程序,要在Debug模式下,编译得到可执行程序,需要加-g选项,如下:

gcc mycode.c -o mycode -g

在这里插入图片描述

readelf mycode_Debug -S//查看一个可执行程序对应的二进制文件
readelf mycode_Debug -S | grep debug//将二进制文件中和debug有关的部分过滤出来

通过上面的指令,可以查看可执行程序所对应的二进制文件,其中mycode_Debug是在Debug模式下编译得到的一个可执行程序,它里面就包含Debug信息。

在这里插入图片描述
总结:要想被gdb调试,必须以Debug方式发布,即在执行gcc/g++指令的时候需要添加-g选项。

二、gdb常用指令

#include <stdio.h>    
    
int AddTop(int top)    
{    
    int res = 0;    
    int i = 1;    
    for(; i <= top; i++)                                                                                                                                                                      
    {    
        res += i;    
    }    
    
    return res;    
}    
    
    
int main()    
{    
    printf("Debug begin\n");    
    
    int top = 100;    
    int sum = AddTop(top);    
    
    printf("sum:%d\n",sum);    
    
    printf("Debug end\n");    
    return 0;    
}    

我将以上面这段代码为例,为大家演示gdb的使用方法。

  • gdb binFile:进入gdb环境,其中binFile是一个可执行程序。

在这里插入图片描述

  • ctrl+dq+enter:退出gdb环境。

  • listl:显示binFile的源代码,接着上次的位置往下列,每次10行。

在这里插入图片描述

  • l numlist num:其中num是行号,将源代码的第num行在中间位置显示。

在这里插入图片描述

小Tips:如果我们希望看到完整的源代码,可以用l 0,其次因为gdb会自动记录最近一条指令,当我们执行完l 0后,gdb会将l指令记录下来,我们只需要点击enter,gdb就会自动去执行它所记录的指令,这样我们就可以看到完整的源代码啦。

在这里插入图片描述

  • list Funcl Func:其中Func是函数名,列出某个函数的源代码。

在这里插入图片描述

  • runr:运行程序。

在这里插入图片描述

  • break(b) 行号:在某一行设置断点。

在这里插入图片描述

  • info break(b):查看断点信息。

在这里插入图片描述

  • d Num:删除一个断点,其中Num是断点编号。

在这里插入图片描述
小Tips:如果在调试过程中退出,那么再次进入调试环境,上一次的调试信息会丢失,即之前设置的断点都没了。

  • nnext:逐过程,单条执行,当有函数调用时,不会进入函数内部。

  • sstep:逐语句,进入函数调用。

  • p 变量:打印变量的值。

在这里插入图片描述
小Tips:通过p来打印变量的值,不会根据我们调试的进行而实时变化。

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值。

在这里插入图片描述

  • undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号。

  • until x:跳至x行,可以让我们快速的运行代码块。

在这里插入图片描述

  • finish:执行完当前函数返回,然后停下来等待命令。

在这里插入图片描述
小Tipsfinish指令可以快速的帮我们查看问题是不是出在当前函数中。

  • continuec:从当前断点直接运行到下一个断点处。

在这里插入图片描述

  • disable Num:禁用断点,其中Num是断点编号。

在这里插入图片描述

  • enable Num:启用断点,其中Num是断点编号。

  • b 函数名:在某个函数开头设置断点。

  • b mycode.c:line:在mycode.c这个源文件的第line行设置断点。(line表示行号)

  • b mycode.c:main:在mycode.c源文件的main函数处打断点。

  • set var:修改变量的值。

  • bt:查看各级函数调用及参数。

  • info locals:查看当前函数栈帧中所有局部变量的值。


🎁结语:
 今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是春人前进的动力!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪潮数字咨询专家孙崇虎受邀为第十二届中国PMO大会演讲嘉宾

浪潮数字企业技术有限公司集团管控事业部咨询专家孙崇虎先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;VUCA时代的项目管理信息化应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 当前…

LiveNVR监控流媒体Onvif/RTSP功能-如何配置默认用户账户及用户密码修改用户名

LiveNVR监控摄像头如何配置默认用户账户及用户密码修改用户名 1、默认用户名密码1.1、初次配置启动1.2、重新配置启动 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、默认用户名密码 1.1、初次配置启动 在解压目录下的 livenvr.ini 里面添加如下配置&#xff0c;配置后再启动&a…

ios 知识

IOS 类文件.h和.m中interface的区别 大家都知道我们在创建类文件时会发现&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他们之间有何区别呢&#x…

C语言——水仙花数字

//水仙花数字 //每个数位上的数字的 3次幂之和等于它本身 //列如&#xff1a;1531^35^33^3 #include<stdio.h> int main() {int i,x,y,z;for(i100;i<1000;i){xi%10;yi/10%10;zi/100%10;if(i(x*x*xy*y*yz*z*z))printf("%d\n",i);}return 0; } //输出100-1000…

【HMS Core】支付失败报错60004

【关键字】 报错、60004、developerPayload、支付服务 【问题描述1】 集成应用内支付服务&#xff0c;发现部门用户支付失败报错60004 ​ 【问题分析】 根据官网错误码&#xff0c;是由于支付接口访问过频造成的 那么&#xff0c;这个异常是针对用户的单台设备访问频次过高…

vscode vue3+vite 配置eslint

vue2webpackeslint配置 目前主流项目都在使用vue3vite&#xff0c;因此针对eslint的配置做了一下总结。 引入ESlint、pritter 安装插件&#xff0c;执行以下命令 // eslint // prettier // eslint-plugin-vue // eslint-config-prettier // eslint-plugin-prettier yarn ad…

游戏行业实战案例 4 :在线时长分析

【面试题】某游戏数据后台设有「登录日志」和「登出日志」两张表。 「登录日志」记录各玩家的登录时间和登录时的角色等级。 「登出日志」记录各玩家的登出时间和登出时的角色等级。 其中&#xff0c;「角色id」字段唯一识别玩家。 游戏开服前两天&#xff08; 2022-08-13 至 …

使用自己的数据集预加载 Elasticsearch

作者&#xff1a;David Pilato 我最近在讨论论坛上收到一个问题&#xff0c;关于如何修改官方 Docker 镜像以提供一个现成的 Elasticsearch 集群&#xff0c;其中已经包含一些数据。 说实话&#xff0c;我不喜欢这个想法&#xff0c;因为你必须通过提 entrypoint.sh 的分叉版本…

九齐NY8BE62D软件开发

开启100us中断 void Time_Init(void) {DISI();//;Initial Timer0PCON1 C_TMR0_Dis; // Disable Timer0TMR0 100; // Load 0x00 to TMR0 (Initial Timer0 register)T0MD C_PS0_TMR0 | C_PS0_Div2; INTE C_INT_TMR0;PCON1 C_TMR0_En; // Enable Timer0ENI(); // Ena…

论文解读|快速可认证的点云配准

原创 | 文 BFT机器人 《TEASER: Fast and Certifiable Point Cloud Registration》是一篇由Yang et al. 在IEEE Transactions on Robotics杂志上发表的研究论文&#xff0c;于2021年4月出版。这篇论文提出了两种快速且可验证的点云配准算法&#xff1a;TEASER和TEASER&#xf…

院线电影票特惠购票系统--竞价分销模式开发

竞价分销模式是一种基于拍卖理论的销售模式&#xff0c;卖家设定一个底价&#xff0c;由买家进行竞价&#xff0c;最终以最高出价者的价格成交。这种模式在电影票销售中的应用可以有效地提高电影院的售票量和收益。在竞价分销模式中&#xff0c;需要开发一个高效的系统来支持这…

VS Code配置Prettier格式化Apex

先决条件 安装nodejs和npm安装vs code安装salesforce extension pack 配置Prettier Apex 创建本地Salesforce项目 (Standard) command shift p -> SFDX: Create Project with Manifest -> Standard 打开terminal运行npm init生成package.json文件 安装prettier ap…

汽车IVI中控开发入门及进阶(十):车载摄像头接口CVBS、AHD和MIPI

文章目录 前言一、CVBS是什么?二、AHD是什么?三、MIPI是什么?前言 汽车电子电气架构正在由传统的分布式架构向域集中式架构转变,也就是将多个应用程序集中在一个域中,正如提到IVI,有些已经开始导入域控,除了一带多的显示屏、一带多的雷达传感器,当然还有一带多的摄像头…

设计HTML5文档结构

定义清晰、一致的文档结构不仅方便后期维护和拓展&#xff0c;同时也大大降低了CSS和JavaScript的应用难度。为了提高搜索引擎的检索率&#xff0c;适应智能化处理&#xff0c;设计符合语义的结构显得很重要。 1、头部结构 在HTML文档的头部区域&#xff0c;存储着各种网页元…

React源码解析18(3)------ beginWork的工作流程

摘要 OK&#xff0c;经过上一篇文章。我们调用了&#xff1a; const root document.querySelector(#root); ReactDOM.createRoot(root)生成了FilberRootNode和HostRootFilber。 并且二者之间的对应关系也已经确定。 而下一步我们就需要调用render方法来讲react元素挂载在ro…

研究:ChatGPT在生成代码方面的准确率比抛硬币还低!

✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#xff1a;AI大模型 ChatGPT真的能帮助程序员&#xff1f;研究&#…

【Opencv入门到项目实战】(八):图形直方图|傅里叶变换

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 1.图像直方图1.1 直方图计算1.2 分通道读取1.3 mask操作&#xff08;掩码操作&#xff09; 2.傅里叶变换2.1 频率转换结果2.2 高通和低通滤波器 1.图像直方图 1.1 直方图计算 直方图是一种用于可视化数据分布的图表形式…

朋友圈截图生成,制作朋友圈网页

使用教程可以自己看工具的使用手册。 Windows电脑版&#xff1a; https://imageio.jscs.top/zip/wxchat-moment-windows Mac电脑版&#xff1a; https://imageio.jscs.top/zip/wxchat-moment-mac 这款神器的主要功能是朋友圈评论截图生成器&#xff0c;而且还具有以下功能中…

cesium学习记录05-支持的主要数据格式与服务

1. 矢量数据&#xff1a; 1.1. GeoJSON 定义&#xff1a; 一个基于JSON的地理数据格式&#xff0c;Cesium支持GeoJSON的直接加载。 例子&#xff1a; 加载一个简易故宫建筑的GeoJSON数据。 代码&#xff1a; /*** 添加故宫geojson数据*/AddGuGong() {var viewer this.v…

【Linux从入门到精通】文件操作(C语言vs系统调用)

文章目录 一、C语言的文件IO相关函数操作 1、1 fopen与fclose 1、2 fwrite 1、3 fprintf与fscanf 1、4 fgets与fputs 二、系统调用相关接口 2、1 open与close 2、2 write和read 三、简易模拟实现cat指令 四、总结 &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &#x1f64b;‍…