Linux的调试器--gbd/cgbd

1.引入

#include <stdio.h>
int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result;
}
int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程
序,默认是 release 模式。这一点在我们window下比较直观。
要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序⽆法被
编译。
在创建好两种格式后我们可以看到他们的内存是不一样的。

2.gbd/cgbd的使用

一般情况下,我们更建议使用cgbd,因为cgbd会显示源代码
开始: gdb binFile
退出: ctrl + d quit 调试命令
命令作用样例
list/l显示源代码,从上次位置开始,每次列出 10 行list/l 10
list/l 函数名列出指定函数的源代码list/l main
list/l 文件名:行号列出指定文件的源代码list/l mycmd.c:1
r/run从程序开始连续执行run
n/next单步执行,不进入函数内部next
s/step单步执行,进入函数内部step
break/b [文件名:] 行号在指定行号设置断点break 10
break test.c:10
break/b 函数名在函数开头设置断点break main
info break/b查看当前所有断点的信息info break
finish执行到当前函数返回,然后停止finish
print/p 表达式打印表达式的值print start+end
p 变量打印指定变量的值p x
set var 变量 = 值修改变量的值set var i=10
continue/c从当前位置开始连续执行程序continue
delete/d breakpoints删除所有断点delete breakpoints
delete/d breakpoints n删除序号为 n 的断点delete breakpoints 1/d 1
disable breakpoints禁用所有断点disable breakpoints
enable breakpoints启用所有断点enable breakpoints
info/i breakpoints查看当前设置的断点列表info breakpoints
display 变量名跟踪显示指定变量的值(每次停止时)display x
undisplay 编号取消对指定编号的变量的跟踪显示undisplay 1
until x 行号执行到指定行号until 20
backtrace/bt查看当前执行栈的各级函数调用及参数backtrace
info/i locals查看当前栈帧的局部变量值info locals
quit退出 GDB 调试器quit
对于一些常用的指令我们解释一下:

(1)

r/run从程序开始连续执行run

细节1:gdb启动调试的时候,只是开启了gdb,被调试程序,并没有运行起来。

细节2:r/run,表示的是在gdb的场景中,启动我们自己的mycmd程序

细节3:在没有断点的情况下,r/run,就是 让我们的程序直接运行结束

细节4:断点的本质功能:让我们的程序,在运行到指定的行,进行暂停!

(2)

n/next单步执行,不进入函数内部next
s/step单步执行,进入函数内部step

 这两条指令就相当于vs里的F10和F11。

(3)

continue/c从当前位置开始连续执行程序continue

运行到结束或者下一个节点处

(4)

disable breakpoints禁用所有断点disable breakpoints
enable breakpoints启用所有断点enable breakpoints

为什么不删除?因为要保留调试痕迹

3. 调试技巧

3.1watch

执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB 会暂停程序的执⾏,并通知使⽤者。
如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变
化了,就会通知你。
watch的查看和删除类似于断点,info查看,d删除。

3.2set var确定问题原因

在我们的测试案例中,
更改⼀下标志位,假设我们想得到 +-result
#include <stdio.h>
int flag = 0; // 故意错误
//int flag = -1;
//int flag = 1;
int Sum(int s, int e)
{
int result = 0;
for(int i = s; i <= e; i++)
{
result += i;
}
return result*flag;
}
int main()
{
int start = 1;
int end = 100;
printf("I will begin\n");
int n = Sum(start, end);
printf("running done, result is: [%d-%d]=%d\n", start, end, n);
return 0;
}

运行出来结果为0,但在调试的时候用set var flag=1改变flag的话就是5050。

3.3条件断点

使用方法:

b 行号 条件

eg. b 9 if i == 30 # 9是⾏号,表⽰新增断点的位置。

在原有的断点基础上:

condition 编号 条件

条件断点添加常⻅两种⽅式:1. 新增 2. 给已有断点追加
注意两者的语法有区别,不要写错了。
新增: b ⾏号/⽂件名:⾏号/函数名 if i == 30(条件)
给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if

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

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

相关文章

PPIO × AstrBot:多平台接入聊天机器人,开启高效协同 | 教程

在消息平台接入专属聊天机器人&#xff0c;能快速生成精准答案&#xff0c;与项目管理、CRM等系统集成后&#xff0c;机器人还能根据任务进展自动建群、推送进度提醒&#xff0c;并精准相关人员&#xff0c;实现信息的高效传递。 AstrBot 是一个多平台聊天机器人及开发框架&…

HAProxy 可观测性最佳实践

HAProxy 简介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款广泛使用的高性能负载均衡器&#xff0c;支持 TCP 和 HTTP 协议&#xff0c;提供高可用性、负载均衡和代理服务。它特别适用于负载较大的 Web 站点&#xff0c;能够支持数以万计的并发连接&#xf…

增强LangChain交互体验:消息历史(记忆)功能详解

背景 在构建聊天机器人时,将对话状态传入和传出链至关重要。 LangGraph 实现了内置的持久层,允许链状态自动持久化在内存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我们将演示如何通过将任意 LangChain runnables 包装在最小的 LangGraph 应用程序中来添加持久性…

EasyRTC音视频实时通话助力微信小程序:打造低延迟、高可靠的VoIP端到端呼叫解决方案

一、方案概述​ 在数字化通信浪潮下&#xff0c;端到端实时音视频能力成为刚需。依托庞大用户生态的微信小程序&#xff0c;是实现此类功能的优质载体。基于WebRTC的EasyRTC音视频SDK&#xff0c;为小程序VoIP呼叫提供轻量化解决方案&#xff0c;通过技术优化实现低延迟通信&a…

WebVm:无需安装,一款可以在浏览器运行的 Linux 来了

WebVM 是一款可以在浏览器中运行的Linux虚拟机。不是那种HTMLJavaScript模拟的UI&#xff0c;完全通过HTML5/WebAssembly技术实现客户端运行。通过集成CheerpX虚拟化引擎&#xff0c;可直接在浏览器中运行未经修改的Debian系统。 Stars 数13054Forks 数2398 主要特点 完整 Lin…

CesiumInstancedMesh 实例

CesiumInstancedMesh 实例 import * as Cesium from cesium;// Three.js 风格的 InstancedMesh 类, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…

创建型模式之Abstract Factory(抽象工厂)

创建型模式之Abstract Factory&#xff08;抽象工厂&#xff09; 摘要&#xff1a; 本文介绍了抽象工厂模式&#xff08;Abstract Factory&#xff09;&#xff0c;它是一种创建型设计模式&#xff0c;提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示…

多卡训练核心技术详解

多卡训练核心技术详解 多卡训练 主要围绕分布式环境初始化、模型并行化、数据分片和梯度同步展开。下面结合您的代码,详细解释这些核心部分: 并行执行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式环境初始化 def init_distributed():init_process_…

OpenCV---minAreaRect

一、基本概念与用途 minAreaRect是OpenCV中用于计算点集的最小面积旋转矩形的函数。在计算机视觉领域&#xff0c;它常被用于&#xff1a; 目标检测中获取倾斜对象的边界框&#xff08;如倾斜的车牌、文本行、工业零件&#xff09;形状分析与识别&#xff08;如确定物体的主方…

高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例

高端装备制造项目通常涉及多专业协同、长周期交付和高风险管控&#xff0c;因此系统需具备全生命周期管理能力。例如&#xff0c;北京奥博思公司出品的 PowerProject 项目管理系统就是一款非常适合制造企业使用的项目管理软件系统。 国内某大型半导体装备制造企业与奥博思软件达…

如何科学测量系统的最高QPS?

要准确测量系统的最高QPS&#xff08;Queries Per Second&#xff09;&#xff0c;既不能简单依赖固定请求数&#xff08;如2万次&#xff09;&#xff0c;也不能盲目压到服务器崩溃。以下是专业的方法论和步骤&#xff1a; 1. 核心原则 目标&#xff1a;找到系统在稳定运行&a…

HTML5实现简洁的端午节节日网站源码

HTML5实现简洁的端午节节日网站源码 前言一、设计来源1.1 网站首页界面1.2 端午由来界面1.3 节日活动界面1.4 传统美食界面1.5 民俗文化界面1.6 登录界面1.7 注册界面 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现简洁的端午节节日网站源码&#xff0c;酷炫的大气简…

使用 `\033` 方式设置终端字体颜色

通过 ANSI 转义序列(以八进制 \033 开头 ,十进制 27 ),我们可以在支持的终端中轻松实现这一功能。本文将详细介绍如何使用 \033 设置字体颜色,并提供 C、C++ 和 Python 的示例代码。 什么是 ANSI 转义序列? ANSI 转义序列是一组特殊的字符序列,用于控制终端的显示属性…

脱发因素机器学习数据分析

脱发因素机器学习数据分析 一、背景描述 随着年龄增长&#xff0c;脱发成为影响外貌与健康的重要问题。 本数据集包含遗传、荷尔蒙变化、医疗状况、药物治疗、营养缺乏、心理压力等12个可能导致脱发的因素&#xff0c; 旨在通过数据分析挖掘各因素与脱发的潜在关联&#xf…

React 第四十八节 Router中 useMatch 的使用详细介绍及案例分析

前言 useMatch 是 React Router 中的一个钩子&#xff0c;用于判断当前 URL 路径是否与指定模式匹配&#xff0c;并返回匹配的详细信息。 它常用于动态路由参数提取、条件渲染和导航高亮等场景。 一、useMatch 核心功能 路径匹配检测&#xff1a;判断当前路径是否符合指定模…

ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置

目录 1 操作系统信息 2 MySql数据库版本 3 主机列表 4 MySQL服务器都安装依赖 5 主库服务器安装mysql软件步骤&#xff1a; 6 从服务器安装mysql软件步骤 7 基于二进制日志文件位置的主从复制配置 8 使用全局事务标识符进行主从复制(GTID) 9 部署过程遇到问题 1 操作系…

鸿蒙OSUniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验#三方框架 #Uniapp

UniApp滑动锁屏实战&#xff1a;打造流畅优雅的移动端解锁体验 引言 移动应用的安全性和用户体验是开发中不可忽视的重要环节。滑动锁屏作为一种直观、安全且用户友好的解锁方式&#xff0c;在移动应用中得到广泛应用。本文将深入探讨如何使用UniApp框架实现一个功能完备、动…

专场回顾 | 重新定义交互,智能硬件的未来设计

自2022年起&#xff0c;中国智能硬件行业呈现出蓬勃发展的态势&#xff0c;市场规模不断扩大。一个多月前&#xff0c;“小智AI”在短视频平台的爆火将智能硬件带向了大众视野&#xff0c;也意味着智能硬件已不再仅仅停留在概念和技术层面&#xff0c;而是加速迈向实际落地应用…

zynq 级联多个ssd方案设计(ECAM BUG修改)

本文讲解采用zynq7045芯片如何实现200T容量高速存储方案设计&#xff0c;对于大容量高速存储卡&#xff0c;首先会想到采用pcie switch级联方式&#xff0c;因为单张ssd的容量是有限制的&#xff08;目前常见的m.2接口容量为4TB&#xff0c;U.2接口容量为16TB&#xff09;&…

中国区域每月地下水水位栅格数据集(2005-2022)

时间分辨率&#xff1a;月空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;8.52 GB数据时间范围&#xff1a;2005-01-01 — 2022-12-01元数据更新时间&#xff1a;2024-09-09 数据集摘要 数据集“GWs_cn_1km”提供了2005年至2022年中国区域…