7---Linux调试器gdb及拓展知识

news2025/1/18 3:24:08

一、先决知识补充:

1.1为什么测试人员需要测试的版本必须是release版本而不是debug版本?

  • release版本是用户使用到的版本,release版本能够提供更真实的性能表现、完整的代码逻辑、安全性、稳定性以及用户体验。
  • 测试release版本可以确保用户体验的一致性,任何UI/UX问题都能在测试阶段被发现和解决。

1.2为什么用户要使用release版本?

  • debug版本的可执行程序中包含了大量的调试信息,这些调试信息对用户完全没用,还会占用用户的存储空间,浪费用户下载时的流量。debug版本大小大于release版本。
  • release版本相较于debug版本,代码是有优化的,如内联函数、循环展开、常量折叠等,以提升运行时性能。

1.3灰度上线:

  • 灰度上线(也称为灰度发布或渐进发布)是一种软件部署策略,允许新版本的功能逐步在用户群中推广,以便在实际使用中进行验证和优化。这个过程通常先在一小部分用户中进行测试,逐步扩大到整个用户群。这种方法可以有效地降低新版本上线带来的风险,并在发现问题时及时做出调整。

二、gcc/g++默认编译的可执行程序的版本的猜测和证明:

2.1默认编译得到的版本是release版本:

  • 使用gcc -o直接编译源文件生成的可执行程序的版本是release版本。
  • 因为gcc/g++默认所在的模式是Release,就像vim默认模式为Normal。
  • 加上-g选项,生成的可执行程序的版本就是debug版本了。

2.2第一种验证:

  • 我们知道debug版本中,有大量的调试信息帮助完成程序的调试。所以debug版本的可执行程序一定是大于release版本的。
  • 我们可以通过比较使用-g选项前后生成的可执行程序的大小,判别release版本和debug版本。
"生成debug版本"
gcc mycode.c -o mycode-d -g

"生成release版本"
gcc mycode.c -o mycode-r

        

2.3第二种验证:

  • Linux中可执行程序的文件类型是ELF格式

        

  • 我们可以使用readelf命令查看可执行程序的二进制构成。
readeif -S 文件名 | grep -i debug 

        

三、调试器gdb的使用和部分命令演示:

3.1centos7安装gdb:

sudo yum install -y gdb

        

3.2gdb调试debug版本的可执行程序:

gdb debug版本的可执行程序名字

        

3.3查看源代码:

  • 查看当前执行代码附近的代码,每次显示十行:
list / l

        

  • 查看指定行号附近的代码:
list <line-number> / l <line-number>
  • 查看指定文件的特定行号附近的源代码:
list <file-name>:<line-number>
  • 查看特定函数的源代码:
list <function-name>

3.4启动被调试的程序:

  • 程序不需要参数:
run / r

         

  • 启动程序并提供参数:
run 参数之间使用空格隔开

3.5在程序中设置断点:

  • 在指定行号设置断点:
break <line-number> / b <line-number>

         

  • 在函数调用处设置断点:
break function
  • 在指定文件的函数调用处设置断点:
break <file-name>:function

3.6显示当前设置的断点信息:

  • 查看所有设置的断点:
info breakpoints / info b

        

  • 名词解析:

        

3.7删除设置的断点:

  • 删除指定序号断点:
delete n / d n

        

  • 删除所有断点:
delete / d

        

  • 退出调试后,上一次的所有断点都会被清空。

3.8禁用和启用断点:

  • 禁用断点:
disable n

        

  • 启用断点:
enable n

        

3.9退出gdb:

quit / q

3.10逐语句执行代码:类似F11

step / s

3.11逐过程执行代码:类似F10

next / n

3.12打印变量或者表达式的值:相当于监视窗口查看单个变量

print / p

        

3.13像VS一样常显示某些变量或表达式:

display 变量名

        

3.14取消常显示的变量或表达式:

undisplay 序号

        

3.15运行到指定行:

until n

3.16从一个断点运行到下一个断点:

continue / c

3.17在一个函数内部,直接运行完该函数并跳出:

finish / f

3.18查看当前变量值,类似VS自动窗口:

info locals

3.19修改变量的值:

set char 变量名=值

3.20查看各级函数调用及参数:

breaktrace / bt

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

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

相关文章

基于深度学习PET/CT放射学的预后价值:未来在晚期鼻咽癌个体化诱导化疗中的潜在作用 | 文献速递-深度学习结合影像组学

Title 题目 Prognostic Value of Deep Learning PET/CT-BasedRadiomics: Potential Role for Future IndividualInduction Chemotherapy in AdvancedNasopharyngeal Carcinoma 基于深度学习PET/CT放射学的预后价值&#xff1a;未来在晚期鼻咽癌个体化诱导化疗中的潜在作用 0…

Android 逆向学习【2】——APK基本结构

APK安装在安卓机器上的&#xff0c;相当于就是windows的exe文件 APK实际上是个压缩包 只要是压缩的东西 .jar也是压缩包 里面是.class(java编译后的一些东西) APK是Android Package的缩写,即Android安装包。而apk文件其实就是一个压缩包&#xff0c;我们可以将apk文件的后…

【McCabe度量法】方法详解和软考历年真题

&#x1f50e;嘿&#xff0c;这里是慰慰&#x1f469;&#x1f3fb;‍&#x1f393;&#xff0c;会发各种类型的文章&#xff0c;智能专业&#xff0c;从事前端&#x1f43e; &#x1f389;如果有帮助的话&#xff0c;就点个赞叭&#xff0c;让我开心一下&#xff01;&#x1f…

slam14讲(第9,10讲 后端)

slam14讲&#xff08;第9&#xff0c;10讲 后端&#xff09; 后端分类基于滤波器的后端线性系统和卡尔曼滤波非线性系统和扩展卡尔曼滤波 BA优化H矩阵的稀疏性和边缘化H矩阵求解的总结 位姿图优化公式推导 基于滑动窗口的后端个人见解旧关键帧的边缘化 后端分类 基于滤波器的后…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…

Golang | Leetcode Golang题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; func isInterleave(s1 string, s2 string, s3 string) bool {n, m, t : len(s1), len(s2), len(s3)if (n m) ! t {return false}f : make([]bool, m 1)f[0] truefor i : 0; i < n; i {for j : 0; j < m; j {p : i j - 1if i >…

mysql误删后使用binlog恢复数据

1 预期效果 使用 binlog 恢复数据的预期效果是将误删的数据还原到误删之前的状态&#xff0c;以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录&#xff0c;可以重新执行误删操作之后的插入、更新或删除操作&#xff0c;从而恢复被误删的数据。 数据恢复&…

二.Flowable自带Demo(Flowable-UI)体验

问题反馈 如有问题可通过微信公众号“假装正经的程序员”反馈 Flowable-UI是什么 Flowable-UI是flowable自带的一套供开发人员体验的系统&#xff0c;它通过后台的UI建模&#xff0c;让开发人员了解Flowable的工作流程&#xff0c;同时它部署简单&#xff0c;只需要将对应的w…

医学AI最新研究·哈佛医学院·告别切片局限:3D病理如何革新癌症预后

小罗碎碎念 本期文章分享的主要是AI与肿瘤的复发、转移相关的最新研究。 筛选规则如下&#xff1a; (artificial intelligence or deep Learning or convolutional networks or transformer or selfattention or machine learning) and (Tumor metastasis or Recurrence of Ca…

Windows系统安装OpenSSH使用VScode远程连接内网Linux服务器开发

文章目录 &#x1f4a1;推荐 前言1、安装OpenSSH2、VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网…

视频批量裁剪助手:一键式高效缩小视频尺寸,极速提升工作效率的必备神器!

视频已经成为我们日常生活和工作中不可或缺的一部分。无论是个人vlog、企业宣传片&#xff0c;还是教学视频、广告素材&#xff0c;视频都承载着大量的信息和情感。然而&#xff0c;很多时候&#xff0c;我们手中的视频尺寸并不符合我们的需求&#xff0c;这时&#xff0c;一款…

Xilinx(AMD) FPGA通过ICAP原语读取芯片IDCODE实现方法

1 概述 Xilinx每种型号的FPGA芯片都有一个唯一的IDCODE与之对应&#xff0c;同一型号不同封装的IDCODE是相同的。IDCODE的获取方法包括JTAG、ICAP原语、AXI_HWICAP IP核等。获取IDCODE常用于根据芯片型号改变代码的功能&#xff0c;或者对代码进行授权保护&#xff0c;只能在指…

ROS | 用C++和python实现运动控制功能

基础知识&#xff1a; 用C实现&#xff1a; C代码&#xff1a; 用python实现&#xff1a; Python代码&#xff1a;

【编译原理复习笔记】语法分析-补充(二义性与LR错误处理)

二义性文法的 LR 分析 每个二义性文法都不是 LR 的 但是某些二义性文法更加简短&#xff0c;描述更方便 如 I7 和 I8 具有移进归约冲突 使用优先级和结合性解决冲突 对于 I7&#xff0c;由于乘号优先级高于加号&#xff0c;所以当下一个输入符号为乘号时&#xff0c;我们优…

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 一、简单介绍 二、单变量非线性变换 三、自…

设计模式11——代理模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 代理模式&#xff08;Proxy&am…

mfc100u.dll缺失怎么解决,详细分析mfc100u.dll文件属性

mfc100u.dll文件缺失是一个常见的问题&#xff0c;这通常由计算机在执行操作时不慎造成的dll文件遗失引起。作为一个关键的dll文件&#xff0c;如果没有mfc100u.dll&#xff0c;可能会导致程序无法启动或系统错误。下面&#xff0c;我们将讨论几种解决mfc100u.dll文件遗失的方法…

弘君资本午评:三大股指全线走低,北证50指数逆市涨逾3%

23日早盘&#xff0c;三大股指低开低走&#xff0c;盘中均跌超1%&#xff0c;北证50指数逆市拉升&#xff0c;一度涨超4%&#xff1b;两市半日成交近5300亿元。 到午间收盘&#xff0c;沪指跌1%报3126.82点&#xff0c;深证成指跌1.19%&#xff0c;创业板指跌0.98%&#xff0c…

5月23日 网络编程day6

1.IO多路复用的原理&#xff1f; 答&#xff1a;将文件描述符放入一个集合中&#xff0c;当集合中有事件产生&#xff0c;移除其他文件描述符&#xff0c;执行剩下的文件描述符所对应的任务&#xff0c;往复循环。 2.实现IO多路复用可以使用哪些函数完成&#xff1f; 答&…

深度学习之体育运动项目姿态估计识别计数系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在体育运动领域&#xff0c;对运动员的姿态进行准确估计和识别&#xff0c;以及对运动员数量进行精确…