【C++】linux下的gdb程序调试

目录

  • 【C++】Linux 下的 GDB 程序调试
    • 1. 安装 GDB
    • 2. 编译程序
    • 3. 启动 GDB
    • 4. 设置断点
    • 5. 执行程序
    • 6. 调试命令
    • 7. 调试崩溃
    • 8. 结束调试

【C++】Linux 下的 GDB 程序调试

在开发 C++ 程序时,出现 bug 是常见的。调试是找出程序错误的关键步骤之一。在 Linux 环境下,我们可以使用 GDB (GNU Debugger) 工具来帮助我们进行程序调试。本文将介绍如何在 Linux 下使用 GDB 进行 C++ 程序调试的基本步骤和常用命令。

1. 安装 GDB

首先,我们需要在 Linux 系统上安装 GDB。在大多数发行版的软件仓库中都可以找到 GDB。在 Ubuntu 上,可以使用以下命令进行安装:

sudo apt-get install gdb

2. 编译程序

在进行调试之前,我们需要先用调试符号编译你的 C++ 程序。在编译时,使用 -g 参数来生成调试符号信息。例如,假设你的程序文件名为 “program.cpp” ,可以使用以下命令进行编译:

g++ -g program.cpp -o program

这里如果使用的是cmake:

cmake .. -DCMAKE_BUILD_TYPE=Debug

3. 启动 GDB

通过在终端中输入 gdb 命令即可启动 GDB 调试器,并加载你的程序。例如,假设你的可执行文件名为 “program” ,可以在命令行中输入:

gdb program

4. 设置断点

断点是 GDB 中调试过程中常用的工具之一。通过设置断点,我们可以在程序执行到特定位置时停下来,以便查看程序状态。在 GDB 命令提示符下,可以使用 breakb 命令来设置断点。

  • 在特定行上设置断点:

    break line_number
    

    例如,要在第 10 行设置断点,可以输入:

    break 10
    
  • 在特定函数中设置断点:

    break function_name
    

    例如,要在名为 “myFunction” 的函数中设置断点,可以输入:

    break myFunction
    

5. 执行程序

调试器已经加载程序并设置好断点,可以通过 runr 命令来执行程序。

run

执行后,程序将开始运行,直到遇到第一个断点或程序结束。

6. 调试命令

在程序执行过程中,可以使用以下命令来进行调试:

  • nextn:单步执行程序,将执行到下一行,但不会进入函数。
  • steps:单步执行程序,将执行到下一行,并进入函数。
  • continuec:继续执行程序,直到遇到下一个断点或程序结束。
  • printp:打印变量的值。例如,p variable_name
  • backtracebt:显示当前调用栈。
  • quitq:退出 GDB 调试器。

此外,还有其他许多 GDB 命令可用以帮助进行调试和查看程序的状态,可以使用 help 命令获取更多信息。

7. 调试崩溃

如果程序发生崩溃,GDB 可以帮助我们确定问题所在。当程序异常终止时,可以使用 backtrace 命令查看调用栈,并使用 print 命令查看相关变量的值,以了解导致崩溃的原因。如果可用,还可以使用 core 文件进行更深入的分析。

gdb program core

8. 结束调试

当调试完成后,可以使用 quit 命令退出 GDB 调试器。

以上是在 Linux 环境下使用 GDB 调试 C++ 程序的基本步骤和常用命令。掌握了这些基本技巧,可以更高效地诊断和修复程序中的错误。希望这篇博客对你在 C++ 程序调试方面有所帮助。

附:如使用vscode的界面化调试,其json为:

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb)start","type": "cppdbg","request": "launch","program": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/arcface_demo","args": [],"stopAtEntry": false,"cwd": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"miDebuggerPath": "/usr/bin/gdb"}]
}

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

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

相关文章

RedisTemplate使用详解

RedisTemplate介绍StringRedisTemplate介绍RedisConnectionFactory介绍RedisConnectionFactory源码解析 RedisOperations介绍RedisOperations源码解析 RedisTemplate使用连接池配置RedisTemplate连接池连接池配置 RedisTemplate应用场景RedisTemplate主要特点RedisTemplate使用…

redis运维(十六) 有序集合

一 有序集合 把握一点: 各种redis 命令都提供各种语言对应的API 接口,后续API是关键 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合类型的一部分,所以它保留了集合中元素不能重复的特性3、但是不同的是,有序集合给每个元素多设置…

什么是数字孪生?

数字孪生是指通过数字化技术手段,将现实世界中的实体物理系统或过程与其数字化模型相连接,实现实体物理系统或过程的虚拟仿真、监测、预测和优化等功能的一种技术。数字孪生技术可以将物理系统的运行状态、性能参数、故障信息等实时反馈到数字模型中&…

转型做视频了,博客就是稿子,继续坚持写博客,同时发布视频,能写博客说明思路清晰了,能再讲明白,理解就更透彻了,紧跟上时代发展。

1,今天特别记录下,B站给开通了《合集》功能 最近使用视频制作了几个视频。播放量还不错,最好的已经到了 2.6K了。 然后粉丝也涨到了 200个。 添加链接描述 紧跟时代:从写博客到录视频,粉丝大涨,突破200个&…

vue开发一、在Vue中引入ElementUI二、在Vue中使用阿里图标库

目录 一、在Vue中引入ElementUI1. 安装ElementUI2. 引入ElementUI3. 使用ElementUI组件 二、在Vue中使用阿里图标库1. 在阿里图标库中选择图标2. 下载图标3. 引入图标4. 使用图标 总结 一、在Vue中引入ElementUI ElementUI是一种基于Vue的第三方UI库,提供了许多常用…

接口自动化测试 —— 工具、请求与响应

一、工具: 1.工具介绍 postman :很主流的API测试工具,也是工作里面使用最广泛的研发工具。 JMeter: ApiPost: 2.安装postman: 安装好直接打开,不用注册。 二、通信模式: 1、…

【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅

在现代的软件开发中,处理数据的能力是至关重要的。而当我们谈及数据格式时,JSON(JavaScript Object Notation)通常是首选。为了在Java中轻松地将对象转换为JSON,我们需要一种强大而灵活的工具。这时,Jackso…

【Java 进阶篇】Redis:打开缓存之门

介绍 Redis(Remote Dictionary Server)是一个高性能的键值对存储系统,被广泛用作缓存、消息中间件和数据库。它以其快速的读写能力、支持多种数据结构和丰富的功能而闻名。在这篇博客中,我们将深入了解Redis的概念、安装以及基本…

MQTT协议消息代理服务远程连接

目录 1. Linux 搭建 Mosquitto 2. Linux 安装Cpolar 3. 创建MQTT服务公网连接地址 4. 客户端远程连接MQTT服务 5. 代码调用MQTT服务 6. 固定连接TCP公网地址 7. 固定地址连接测试 Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1。它可以在不…

第二十章:多线程

进程 线程的特点 1.进程是资源分配的最小单位&#xff0c;线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 package twentyth; public class ThreadTest extends Thread { public void run() { for (int i 1; i < 10; i) {//继承重…

Unity开发之C#基础-File文件读取

前言 今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢&#xff1f; 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以…

【2023C卷最新题目】20天拿下华为OD笔试之【贪心】2023C-找座位/2023B-座位调整-全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入输出说明示例一输入输出 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 相同问题不同描述2023C-找座位题目描述输入描述输出描述示例一输入输出 示例二输入输出 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描…

Spring Boot创建和使用(重要)

Spring的诞生是为了简化Java程序开发的&#xff01; Spring Boot的诞生是为了简化Spring程序开发的&#xff01; Spring Boot就是Spring框架的脚手架&#xff0c;为了快速开发Spring框架而诞生的&#xff01;&#xff01; Spring Boot的优点&#xff1a; 快速集成框架&#x…

2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲…

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;预写式日志&#xff09;机制来实现的。 在使用 WAL 的系统中&#xff0c;所有的修改都先被写入到日志中&#xff0c;然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …

【Java开发】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时&#xff…

cocos2dx ​​Animate3D(二)

Twirl 扭曲旋转特效 // 持续时间(时间过后不会回到原来的样子) // 整个屏幕被分成几行几列 // 扭曲中心位置 // 扭曲的数量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

编程语言发展史:C语言的诞生及其影响

预计更新 第一部分&#xff1a;早期编程语言 1.1布尔代数和机器语言 1.2汇编语言的出现和发展 1.3高级语言的兴起 第二部分&#xff1a;主流编程语言 1.1 C语言的诞生及其影响 1.2 C语言的发展和应用 1.3 Java语言的出现和发展 1.4 Python语言的兴起和特点 1.5 JavaScript语言…

基于springboot实现摄影跟拍预定管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现摄影跟拍预定管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

【2018年数据结构真题】

方法一 给定一个含n(n>1)个整数的数组&#xff0c;请设计一个在时间上尽可能高效的算法&#xff0c;找出数组中未出现的最小正整数。例如&#xff0c;数组{-5&#xff0c;3&#xff0c;2&#xff0c;3}中未出现的最小正整数是1&#xff1b;数组{1&#xff0c;2&#xff0c;…