当前位置: 首页 > news >正文

Linux的调试工具 - gdb(超详细)

Linux的调试工具 - gdb

  • 1. 背景
  • 2. 开始使用
    • 指令的使用都用下面这个C语言简单小代码来进行演示:
    • 1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。
    • 2. list或l 函数名:列出某个函数的源代码。
    • 3. r或run: 运行程序。
    • 4. break或b 行号:在某一行设置断点
    • 5. n或next:单条执行(类似vs中的F10)
    • 6. s或step:进入函数调用(类似vs中的F11)
    • 7. break 函数名:在某个函数开头设置断点
    • 8. info break或info b:查看断点信息。
    • 9. finish:执行到当前函数返回,然后挺下来等待命令
    • 10. p 变量:打印变量值。
    • 11. continue或c:从当前位置开始连续而非单步执行程序
    • 12. run或r:从开始连续而非单步执行程序
    • 13. delete breakpoints:删除所有断点
    • 14. delete breakpoints n:删除序号为n的断点
    • 15. disable breakpoints:禁用断点
    • 16. enable breakpoints:启用断点
    • 17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值
    • 18. undisplay:取消对先前设置的那些变量的跟踪
    • 19. until X(行号):跳至X行
    • 20. breaktrace或bt:查看各级函数调用及参数
    • 21. q或quit:退出gdb

1. 背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式
    在这里插入图片描述

2. 开始使用

指令的使用都用下面这个C语言简单小代码来进行演示:

  1 #include <stdio.h>2 3 int SumAdd(int x)4 {5     int i=1;6     int sum=0;7     for(i=1;i<=x;i++)8     {9         sum+=i;10     }11     return sum;12 }13 14 int main()15 {16     printf("%d \n",SumAdd(100));17     return 0;18 }            

1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。

例:l 0

在这里插入图片描述


2. list或l 函数名:列出某个函数的源代码。

例:l SumAdd

在这里插入图片描述


3. r或run: 运行程序。

注: 如果没有断点,程序将运行到底

例:r

在这里插入图片描述


4. break或b 行号:在某一行设置断点

例:b 3

在这里插入图片描述


5. n或next:单条执行(类似vs中的F10)

注: 单条执行需要在调试启动的情况下进行,需要先打断点,然后r执行到断点位置

例:n

在这里插入图片描述


6. s或step:进入函数调用(类似vs中的F11)

例:s

在这里插入图片描述


7. break 函数名:在某个函数开头设置断点

例:break SumAdd

在这里插入图片描述


8. info break或info b:查看断点信息。

例:info b

在这里插入图片描述


9. finish:执行到当前函数返回,然后挺下来等待命令

例:finish

在这里插入图片描述


10. p 变量:打印变量值。

例:p sum

在这里插入图片描述


11. continue或c:从当前位置开始连续而非单步执行程序

例:c

在这里插入图片描述


12. run或r:从开始连续而非单步执行程序

r

在这里插入图片描述

13. delete breakpoints:删除所有断点

例;delete breakpoints

在这里插入图片描述


14. delete breakpoints n:删除序号为n的断点

delete breakpoints 5

在这里插入图片描述


15. disable breakpoints:禁用断点

例:disable breakpoints

在这里插入图片描述


16. enable breakpoints:启用断点

例:enable breakpoints

在这里插入图片描述


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

例:display sum

在这里插入图片描述


18. undisplay:取消对先前设置的那些变量的跟踪

例:undisplay

在这里插入图片描述


19. until X(行号):跳至X行

例:until 11

在这里插入图片描述


20. breaktrace或bt:查看各级函数调用及参数

例:bt

在这里插入图片描述


21. q或quit:退出gdb

例:q

在这里插入图片描述

(本章完)

相关文章:

Linux的调试工具 - gdb(超详细)

Linux的调试工具 - gdb 1. 背景2. 开始使用指令的使用都用下面这个C语言简单小代码来进行演示&#xff1a;1. list或l 行号&#xff1a;显示文件源代码&#xff0c;接着上次的位置往下列&#xff0c;每次列10行。2. list或l 函数名:列出某个函数的源代码。3. r或run: 运行程序。…...

已知平面内三点,求其平面的法向量

三点平面法向量 设三点坐标为A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3) 向量AB(x2-x1,y2-y1,z2-z1),AC(x3-x1,y3-y1,z3-z1) AB、AC所在平面的法向量即ABAC(a,b,c),其中&#xff1a; a(y2-y1)(z3-z1)-(z2-z1)(y3-y1) b(z2-z1)(x3-x1)-(z3-z1)(x2-x1) c(x2-x1)(y3-y1)-(x3-x1)(y2-y1)…...

HTML

HTML 1.HTML结构 1.1认识HTML HTML是超文本标记语言&#xff0c;电脑上看到的所有网站都是html实现的 HTML代码是“标签”构成的&#xff0c;简单来说&#xff0c;html就是一堆标签的组合 形如 <body>hello</body>标签名 (body) 放到 < > 中 大部分标签成…...

Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例

Java手写最大子数组和算法&#xff08;如Kadane算法&#xff09;和最大子数组和算法&#xff08;如Kadane算法&#xff09;应用拓展案例 1. 算法思维导图 以下是使用mermaid代码表示的Kadane算法的实现原理&#xff1a; #mermaid-svg-rI7hVAVsP1qtjZK7 {font-family:"tr…...

掌握NVM、NRM和NPM:Node.js开发的利器

**掌握NVM、NRM和NPM&#xff1a;Node.js开发的利器** 背景介绍&#xff1a;如何使用NVM&#xff1a;在Windows上安装NVM&#xff1a;在macOS上安装NVM&#xff1a;配置NVM&#xff1a;常用NVM命令&#xff1a; 如何使用NRM&#xff1a;安装NRM&#xff1a;配置全局NRM&#xf…...

Nacos 2.2.3 部署到linux

到https://github.com/alibaba/nacos/releases 下载编译后压缩包&#xff0c;如nacos-server-2.2.3.tar.gz这种&#xff0c;里面包含有nacos的jar包&#xff0c;不然启动不了 1.新建并初始化数据库 创建nacos数据库&#xff0c;执行mysql-schema.sql文件&#xff0c;这个文件…...

设计模式之十:状态模式

状态模式通过改变对象内部的状态来帮助对象控制自己的行为。 这是一张状态图&#xff0c;其中每个圆圈都是一个状态。 最简单&#xff0c;第一反应的实现就是使用一个变量来控制状态值&#xff0c;并在方法内书写条件代码来处理不同情况。 package headfirst.designpatterns.…...

Python 的运算符和语句(条件、循环、异常)基本使用指南

运算符的分类 算数运算符赋值运算符复合赋值运算符比较运算符逻辑运算符 算数运算符 运算符描述实例加1 1 输出结果为 2-减1 - 1 输出结果为 0*乘2 * 2 输出结果为 4/除10 / 2 输出结果为 5//整除9 // 4 输出结果为 2%取余9 % 4 输出结果为 1**指数2 ** 4 输出结果为 16&…...

文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

三、用go语言&#xff0c;给出 RANDOMIZED-SELECT的一个基于循环的版本。 文心一言&#xff1a; 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示。这个版本使用 Go 语言编写&#xff0c;利用随机化来选择一个元素&#xff0c;并在循环中不断地调整选择的元素&#x…...

React中组件通信01——props

React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子&#xff08;…...

接口测试——接口协议抓包分析与mock_L1

目录&#xff1a; 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口&#xff1a;不同的系统之间相互连接的部分&#xff0c;是一个传递数据的通道接口测试&#xff1a;检查数据的交换、传递和控制…...

四种常用的自动化测试框架

一直想仔细研究框架&#xff0c;写个流水账似的测试程序不难&#xff0c;写个低维护成本的测试框架就很难了&#xff0c;所以研究多种测试框架还是很有必要的&#xff0c;知道孰优孰劣&#xff0c;才能在开始编写框架的时候打好基础&#xff0c;今天读到了KiKi Zhao的翻译文章&…...

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…...

Unity 安装及运行MLAgents

1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…...

LightDB-A 兼容oracle支持mod操作符

LightDB-A 兼容oracle支持mod操作符 LightDB-A 为了兼容oracle&#xff0c;从23.3版本开始支持mod操作符&#xff0c;其语义同 ‘%’ 操作符&#xff0c;使用案例如下&#xff1a; select 5 mod 2;?column? ----------1 (1 row)select 0 % 0; ERROR: division by zerosel…...

SpringMVC之自定义注解

目录 一、Java注解 1.1 注解简介 1.2 注解分类 1.3 JDK基本注解 1.4 JDK元注解 1.5 自定义注解 1.5.1 标记注解 1.5.2 元数据注解 1.6 如何自定义注解 二、自定义注解的基本案例 2.1 案例一&#xff08;获取类、方法以及属性上的注解&#xff09; 2.1.1 Ingerited的…...

QT:使用普通按钮、网格布局管理器、标签、行编辑器、水平布局管理器、垂直布局管理器做一个小项目

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //普通按钮 #include <QGridLayout> //网格布局管理器 #include <QLabel> //标签 #include <QLineEdit> //行编辑器 #include <QHBoxLayo…...

【小沐学写作】程序员必备技能:在线协作文档汇总

文章目录 1、简介2、微软Office在线文档2.1 功能简介2.2 使用费用2.3 用户体验 3、石墨文档3.1 功能简介3.2 使用费用 4、腾讯文档4.1 功能简介4.2 使用费用 5、语雀5.1 功能简介5.2 使用费用 6、飞书6.1 功能简介6.2 使用费用 7、印象笔记7.1 功能简介7.2 使用费用 结语 1、简…...

「工具|数据接口」免费公开的REST API 如何借助github搭建自己的fake API接口

本文主要介绍日常开发、测试、教学或者分享中&#xff0c;可能遇到的模拟数据问题。分享免费开发的测试数据接口&#xff0c;以及如何利用github快速搭建定制化的接口数据&#xff0c;避免使用真实数据的风险以及自己现编数据的麻烦。 文章目录 一、场景说明二、免费公开的Fak…...

leetcode 18. 四数之和

给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 < a,…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...