Linux编程:用于调试 C、C++ 和其他编程语言编写的程序的调试工具GDB的使用

目录

一、概述

二、 安装GDB

三、准备程序

四、使用GDB

1、启动GDB

2、获取帮助

五、 常用GDB命令

六、示例调试会话

七、其他事项


一、概述

        GDB(GNU Debugger)是一个非常强大的调试工具,广泛用于调试 C、C++ 和其他编程语言编写的程序。其主要功能包括:

  1. 设置断点:在程序指定位置暂停执行,便于观察程序状态。
  2. 单步执行:逐行或逐指令执行程序,观察程序运行流程。
  3. 查看变量值:在调试过程中,实时查看变量的当前值。
  4. 跟踪函数调用:了解函数调用顺序和参数传递情况。
  5. 动态修改变量值:在调试过程中修改变量值,测试不同情况下的程序行为。
  6. 查看源代码:在调试过程中,随时查看当前执行到的源代码。
  7. 多线程调试:支持多线程程序的调试,可以查看和切换线程。
  8. 条件断点:设置断点在满足特定条件时触发,提高调试效率。
  9. 观察点:当变量值发生变化时,程序自动暂停。
  10. 调试核心转储文件:分析程序崩溃时的状态,找出崩溃原因。

    GDB为Linux环境下C/C++程序的开发和调试提供了强大的支持,帮助开发者快速定位和修复程序中的错误。使用GDB进行程序调试是Linux环境下开发人员常用的调试手段。 

二、 安装GDB

        确保系统中已经安装了GDB。在大多数Linux发行版中,可以使用包管理器来安装GDB。例如,在Ubuntu或Debian上,可以使用以下命令:

sudo apt-get install gdb

三、准备程序

        确保程序是可调试的,也就是说,它应该包含调试信息。在编译程序时,使用-g选项来包含调试信息:

gcc -g -o myApp myApp.c

四、使用GDB

1、启动GDB

启动GDB并指定想要调试的程序:

gdb ./myApp

2、获取帮助

可以使用如下命令获取帮助

gdb --h

实际操作如下:

获取帮助

五、 常用GDB命令

一旦GDB启动,可以使用以下命令进行调试:

- run(或简写r):开始执行程序。

- break(或简写b):设置一个断点。例如,break main会在main函数处设置一个断点。

- next(或简写n):执行下一行代码,但不进入函数内部。

- step(或简写s):执行下一行代码,如果是函数则进入函数内部。

- print(或简写p):打印变量的值。例如,print i会打印变量i的值。

- continue(或简写c):继续执行程序,直到下一个断点。

- quit(或简写q):退出GDB。

- list(或简写l):列出源代码。可以指定行号或函数名。

- info:查看信息,如info locals查看局部变量,info breakpoints查看断点信息。

- watch:设置观察点,当变量值变化时程序会停止。

六、示例调试会话

下面是一个简单的GDB调试会话示例:

$ gdb ./myApp
(gdb) break main
Breakpoint 1 at 0x400550: file myApp.c, line 5.
(gdb) run
Starting program: /path/to/myApp Breakpoint 1, main () at myApp.c:5
5           int i = 0;
(gdb) next
6           for(i = 0; i < 10; i++) {
(gdb) print i
$1 = 0
(gdb) continue
Continuing.Breakpoint 1, main () at myApp.c:5
5           int i = 0;
(gdb) next
6           for(i = 0; i < 10; i++) {
(gdb) print i
$2 = 10
(gdb) quit

        在这个示例中,我们在main函数的开始处设置了一个断点,并启动了程序。程序在断点处停止,我们打印了变量i的值,然后继续执行。当循环结束时,我们再次打印i的值,并退出GDB。

七、其他事项

        1、在调试时,确保有程序的源代码,并且编译时加入了调试信息。

        2、GDB只能调试可执行文件,不能调试脚本语言(如Python或JavaScript)。

        3、如果程序是多线程的,GDB也提供了线程相关的命令,如thread(或简写t)。

        掌握GDB是Linux环境下C/C++程序调试的重要技能,它可以帮助快速定位和修复程序中的错误。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


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

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

相关文章

书生实战营第四期-基础岛第五关-XTuner 微调个人小助手认知

基础任务 使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知 一、环境配置与数据准备 1.构建虚拟环境 cd ~ #git clone 本repo git clone https://github.com/InternLM/Tutorial.git -b camp4 mkdir -p /root/finetune && cd /root/finetune conda create -…

java day04-面向对象基础(内存 封装 继承 修饰符 工具类 )

1.对象内存图 1.1 Java 内存分配 1.2 堆和栈 栈:所有局部变量都会在栈内存中创建 局部变量&#xff1a;定义在方法中的变量或者方法声明上的变量 方法执行都会加载到栈中进行 -----------------------------------------------------------------------------------------…

【C++练习】二进制到十进制的转换器

题目&#xff1a;二进制到十进制的转换器 描述 编写一个程序&#xff0c;将用户输入的8位二进制数转换成对应的十进制数并输出。如果用户输入的二进制数不是8位&#xff0c;则程序应提示用户输入无效&#xff0c;并终止运行。 要求 程序应首先提示用户输入一个8位二进制数。…

Pytorch学习--神经网络--网络模型的保存与读取

一、网络模型的保存与读取方式1 方法讲解 保存模型 import torch import torchvision model torchvision.models.vgg16(weightsDEFAULT) #保存模型和参数 torch.save(model,"save_method1.pth")读取模型 import torch model torch.load("save_method1.pth&…

凸优化理论,凸二次规划问题,对偶问题及KKT条件

凸优化理论 ​ 研究凸优化之前我们不妨提出几个小问题&#xff1a; 什么是优化问题&#xff1f;优化问题的解是什么&#xff1f;什么是凸优化问题&#xff1f;凸优化问题的解决方案是什么&#xff1f; 1.1 优化问题 ​ 理解优化问题其实很简单&#xff0c;我们其实从高中事…

智能的编织:C++中auto的编织艺术

在C的世界里&#xff0c;auto这个关键字就像是一个聪明的助手&#xff0c;它能够自动帮你识别变量的类型&#xff0c;让你的代码更加简洁和清晰。下面&#xff0c;我们就来聊聊auto这个关键字的前世今生&#xff0c;以及它在C11标准中的新用法。 auto的前世 在C11之前&#x…

The Rank-then-Encipher Approach

原始观点 Format-Preserving Encryption 4 The Rank-then-Encipher Approach 引用1 Hybrid diffusion-based visual image encryption for secure cloud storage 2.2 Sum-preserving encryption Bellare introduced the concept of format-preserving encryption (FPE)…

江西省补贴性线上职业技能培训管理平台(刷课系统)

江西省补贴性线上职业技能培训管理平台(刷课系统) 目的是为了刷这个网课 此系统有两个版本一个是脚本运行&#xff0c;另外一个是可视化界面运行 可视化运行 技术栈:flask、vue3 原理: 通过分析网站接口&#xff0c;对某些接口加密的参数进行逆向破解&#xff0c;从而修改请求…

Linux基础4-进程5(程序地址空间详解)

上篇文章:Linux基础4-进程4&#xff08;环境变量&#xff0c;命令行参数详解&#xff09;-CSDN博客 本章重点&#xff1a; 1 重新理解c/c地址空间 2 虚拟地址空间 一. c/c地址空间 地址空间布局图: 运行下列代码&#xff0c;进行观察 #include <stdio.h> #include <…

动态规划-背包问题——[模版]01背包(背包母题)

1.题目解析 题目来源 [模版]01背包_牛客题霸_牛客网 测试用例 2.算法原理 1.状态表示 第一小问&#xff1a;求最大价值 第二小问&#xff1a;求充满时的价值 2.状态转移方程 第一小问&#xff1a;求最大价值 第二小问&#xff1a;求充满时的价值 3.初始化 第一小问&#xff1a…

JavaWeb之会话跟踪技术

前言 这一节主要讲会话跟踪技术 1.补充 为了提交Gitee我修改了模块的目录&#xff0c;就是移动了模块&#xff0c;导致模块不是Maven了&#xff0c;可以在右边的Maven小工具&#xff0c;点加号&#xff0c;把模块重新添加为Maven 2. 概述 3. Cookie 3.1 基本使用 //发送coo…

第二十周周报:回顾篇

目录 摘要 Abstract 1 深度学习基础知识 1.1 学习率 1.1.1 自适应学习率 1.1.2 学习率调度 1.2 归一化 1.2.1 批量归一化 1.2.2 特征归一化 1.3 激活函数 1.3.1 Sigmoid函数 1.3.2 Tanh函数 1.3.3 ReLU函数 1.3.4 Leak ReLU函数 1.3.5 PReLU函数 1.3.6 ELU函数…

智能化SCRM方案助力企业高效管理与营销转型

内容概要 现代企业面临着复杂多变的市场环境&#xff0c;传统的管理与营销方式常常无法满足日益增长的需求。这时&#xff0c;智能化SCRM方案便应运而生&#xff0c;为企业带来了新的机遇与挑战。智能化SCRM方案不仅仅是一个单一的工具&#xff0c;它更像是一个全面的解决方案…

PRD2012学习笔记

图例位置&#xff1a; 使用 loc‘upper left’ 指定图例的基本位置为左上角。 使用 bbox_to_anchor(0.1, 0.9) 来进行自定义位置调整&#xff0c;其中 (0.1, 0.9) 指定图例相对于图形区域的坐标 (x, y)。 0.1 表示距离左边界的比例位置&#xff0c;0.9 表示距离上边界的比例位置…

【01课_初识算法与数据结构】

一、理解算法 1、算法的概念 算法&#xff0c;个人理解就是计算一段逻辑&#xff0c;最简化&#xff0c;最快速的方式、方法 每个函数&#xff0c;就包含了一定的算法&#xff0c;执行一定的计算逻辑 算法是一系列程序指令&#xff0c;用于解决特定的运算和逻辑问题 2、衡…

《⼆叉搜索树》

《⼆叉搜索树》 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3 二叉树的功能说明及实现3.1 ⼆叉搜索树的插⼊3.2 ⼆叉搜索树的查找3.3 ⼆叉搜索树的删除 4二叉搜索树的实现代码5 ⼆叉搜索树key和key/value使⽤场景5.1 key搜索场景&#xff1a;5.2 key/value搜索场景&#xff1a…

stm32 踩坑笔记

串口问题&#xff1a; 问题&#xff1a;会改变接收缓冲的下一个字节 串口的初始化如下&#xff0c;位长度选择了9位。因为要奇偶校验&#xff0c;要选择9位。但是接收有用数据只用到1个字节。 问题原因&#xff1a; 所以串口接收时会把下一个数据更改

卫星授时服务器,单北斗授时服务器,北斗卫星时钟服务器

当前NTP授时服务器已经实现内部的元器件及芯片实现采用国产化&#xff0c;已经证明了国产产品已经摆脱需要依靠进口元器件及芯片才能实现的产品研发、也证明了大国崛起。下来我们来分析下国产化服务器具备的优势。 1、采用国产操作系统&#xff1a;使用国产化系统Linux更加可靠…

Windows11免密码自动登录

按winR&#xff0c;打开运行&#xff0c;输入Control Userpasswords2&#xff0c;打开用户账户。 打开该设置&#xff0c;取消选中该选项&#xff0c;点击应用&#xff0c;输入想要自动登录的账户和密码&#xff0c;即可开机后自动登录Windows。 若此界面无该选项&#xff0c;…

C++使用开源ConcurrentQueue库处理自定义业务数据类

ConcurrentQueue开源库介绍 ConcurrentQueue是一个高性能的、线程安全的并发队列库。它旨在提供高效、无锁的数据结构&#xff0c;适用于多线程环境中的数据交换。concurrentqueue 支持多个生产者和多个消费者&#xff0c;并且提供了多种配置选项来优化性能和内存使用。 Conc…