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

gdb调试使用记录

使用 GDB(GNU Debugger)进行问题排查是非常有效的。且可以通过core文件进行排查bug,core文件是程序异常崩溃的时候(段错误,非法指令等),系统自动生成的core文件。用户可以通过core文件配合gdb调试命令,调试程序异常崩溃的原因,修复相应的bug。core文件生成需要通过ulimit -c命令来查看和配置,当显示为0时,表示系统不会生成core文件,这个时候我们需要配置相应的环境,使系统可以在程序异常崩溃的时候,生成core文件。

可通过如下命令设置core文件大小和输出位置

ulimit -c unlimited

临时生效则是使用echo命令将想要的格式写入到该文件中,比如

echo ‘/usr/core -%e -%p -%t' > /proc/sys/kernel/core_pattern

  • /usr/core: 指定核心转储文件的存储目录。
  • -%e: 代表崩溃程序的可执行文件名。
  • -%p: 代表崩溃进程的进程ID。
  • -%t: 代表崩溃发生的时间戳。

下面记录下GDB的简单排查问题实用

1. 启动 GDB

在终端中,输入以下命令来启动 GDB:

gdb ./your_program

2. 设置断点

你可以在程序的某个函数或者行号设置断点:

break main      # 在 main 函数处设置断点
break filename.c:line_number  # 在特定文件的特定行设置断点

3. 运行程序

输入命令开始运行程序:

run

4. 程序暂停

当程序运行到断点处时,会暂停,显示当前状态。

5. 检查变量

使用以下命令查看变量的值:

print variable_name  # 打印变量的值

6. 单步调试

逐步执行代码:

  • next:执行下一行(不进入函数内部)
  • step:执行下一行(进入函数内部)

7. 继续执行

如果需要继续执行到下一个断点,可以使用:

continue

8. 查看调用栈

如果程序崩溃,可以查看调用栈:

backtrace

9. 退出 GDB

使用以下命令退出 GDB:

quit

10. 其他有用命令

  • list:查看当前执行代码附近的源代码。
  • info locals:查看当前函数中的所有局部变量。
  • watch variable_name:监视某个变量的变化。

下面是使用 GDB 调试的示例步骤:

编译程序时加上调试信息:

gcc -g -o my_program my_program.c

启动 GDB:

gdb ./my_program

设置断点和运行:

break main
run
使用 next 或 step 逐步调试,查看变量值。

使用 GDB 排查 core 文件的基本步骤如下:

准备环境: 确保你的程序在编译时使用了调试信息。可以通过添加 -g 标志来编译你的代码,例如:

gcc -g -o my_program my_program.c

生成 Core 文件

运行程序并使其崩溃,通常可以通过设置环境变量 ulimit 来确保生成 core 文件:

ulimit -c unlimited
./my_program

使用 GDB 加载 Core 文件: 使用 GDB 加载你的程序和生成的 core 文件:

gdb ./my_program core

查看崩溃信息: 在 GDB 中,你可以使用以下命令来查看崩溃时的堆栈信息:

(gdb) bt

检查变量值: 你可以查看特定变量的值:

(gdb) print variable_name

导航源代码: 使用 list 命令查看崩溃位置附近的代码:

设置断点: 你可以在特定函数或行上设置断点,以便进一步调试:

(gdb) break function_name

继续执行: 如果想从某个点继续执行,可以使用:

(gdb) continue

退出 GDB: 调试完成后,使用以下命令退出:

(gdb) quit

相关文章:

gdb调试使用记录

使用 GDB(GNU Debugger)进行问题排查是非常有效的。且可以通过core文件进行排查bug,core文件是程序异常崩溃的时候(段错误,非法指令等),系统自动生成的core文件。用户可以通过core文件配合gdb调试命令,调试…...

ESXi安装【真机和虚拟机】(超详细)

项目简介: ESXi(Elastic Sky X Integrated)是VMware公司开发的一种裸机虚拟化管理程序,允许用户在单一物理服务器上运行多个虚拟机(VM)。它直接安装在服务器硬件上,而不是操作系统之上&#xff…...

基于SpringBoot+Vue的高校门禁管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…...

【Linux-基础IO】C语言文件接口回顾 系统文件概念及接口

目录 一、C语言文件接口回顾 C语言基础知识 C中文件操作示例 二、系统文件概念及接口 重定向基本理解的回顾 文件的基本概念 系统调用接口 open read write close lseek 什么是当前路径 一、C语言文件接口回顾 引言:我们并不理解文件!从语…...

系统架构笔记-3-信息系统基础知识

知识要点 结构化方法:结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化方法也称为生命周期法,是一种传统的信息系统开发方法,由结构化分析、结构化设计、结构化程序设计三部分有机组合而成,精髓是自顶向下、逐…...

Linux下编程实现网络传送文件

本程序是在Linux下开发的,使用的是C语言,再结合Socket进行编程,分为客户端和服务器两个程序,即采用的是C/S架构,相应的源代码如下: 服务器端: #include <stdio.h> //#include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h&g…...

【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式

前言&#xff1a; 前三篇如下&#xff1a; 【速成Redis】01 Redis简介及windows上如何安装redis-CSDN博客 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、…...

SQL Server 2022的数据类型

新书速览|SQL Server 2022从入门到精通&#xff1a;视频教学超值版_sql server 2022 出版社-CSDN博客 《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 数据类…...

Linux基础3-基础工具4(git),冯诺依曼计算机体系结构

上篇文章&#xff1a;Linux基础3-基础工具3&#xff08;make,makefile,gdb详解&#xff09;-CSDN博客 本章重点&#xff1a; 1. git简易使用 2. 冯诺依曼计算机体系结构介绍 目录 一. git使用 1.1 什么是git? 1.2 git发展史 1.3 git创建仓库 1.4 git命令操作 二. 冯诺依…...

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径&#xff1a; http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…...

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; A. 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。…...

nodejs 013:Prect 样式复用(multiple classes)例子

Prect 简单示例 Prect 为使用相同的现代 API 的快速 3kB React 替代方案。代码形式与 React 基本相同。部分语法区别可见 prect-differences-to-react。以下是一个 Prect 简单示例。 Button目录Button.css&#xff1a; .this {display: inline-block;padding: 3px 8px;margi…...

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…...

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示&#xff0c;他们的开发人员目前使用人工智能来生成代码&#xff0c;57% 的人表示这已成为一种常见做法。 然而&#xff0c;72% 的人认为他们别无选择&#xff0c;只能允许开发人员使用人工智能来保持竞争力&#xff0…...

地图相关的系统软件及插件

1 ArcGis ArcGis For Javascript中文网站 首页 | ArcGis中文网 ArcGis For Javascript英文网站 ArcGIS是一款由Esri公司开发的地理信息系统软件&#xff0c;它提供了丰富的地图数据和分析工具&#xff0c;可以帮助用户进行各种空间分析和决策。 2 leaflet leaflet中文网站…...

Elasticsearch如何排序,分页以及高亮查询

目录 一、排序 二、分页查询 三、高亮查询 一、排序 ES中默认使用相关度分数实现排序&#xff0c;可以通过搜索语法定制化排序。 GET /索引/_search { "query": 搜索条件,"sort": [{"字段1":{"order":"asc"} },{ "字…...

Transformer预测 | 基于Transformer心率时间序列预测(tensorflow)

效果一览 基本介绍 Transformer预测 | 基于Transformer心率时间序列预测(tensorflow) 程序设计 import pandas as pd from pandas.plotting import lag_plot from statsmodels.graphics...

科研绘图系列:R语言误差连线图(errobar linechart)

文章目录 介绍加载R包导入数据数据预处理画图系统信息介绍 误差连线图是一种在数据可视化中常用的图表,它通过在数据点处添加线段(误差线)来表示数据的变异性或不确定性。这些误差线可以基于不同的统计度量,如标准差(Standard Deviation)、标准误差(Standard Error)或…...

智能BI项目第五期

本期主要内容 系统问题分析异步化业务流程分析线程池讲解&#xff08;入门 原理 实战&#xff09;系统异步化改造开发 1.系统问题分析 当系统面临大量用户请求时&#xff0c;我们后端的 AI 处理能力有限&#xff0c;例如服务器的内存、CPU、网络带宽等资源有限&#xff0c…...

Android-UI设计

控件 控件是用户与应用交互的元素。常见的控件包括&#xff1a; 按钮 (Button)&#xff1a;用于执行动作。文本框 (EditText)&#xff1a;让用户输入文本。复选框 (CheckBox)&#xff1a;允许用户选择或取消选择某个选项。单选按钮 (RadioButton)&#xff1a;用于在多个选项中…...

Microsoft Copilot Studio - 尝试一下Agent

1.简单介绍 Microsoft Copilot Studio以前的名字是Power Virtual Agent(简称PVA)。Power Virutal Agent是2019年出现的&#xff0c;是低代码平台Power Platform的一部分。当时Generative AI还没有出现&#xff0c;但是基于已有的Conversation AI技术&#xff0c;即Microsoft L…...

机器学习:支持向量机(SVM)原理解析及垃圾邮件过滤实战

一、什么是支持向量机&#xff08;SVM&#xff09; 1. 基本概念 1.1 二分类问题的本质 在机器学习中&#xff0c;分类问题是最常见的任务之一。最简单的情况就是二分类&#xff1a;比如一封邮件是“垃圾邮件”还是“正常邮件”&#xff1f;一个病人是“患病”还是“健康”&a…...

1、cpp实现Python的print函数

实现一 #include <iostream> #include <list> #include <string>using namespace std;// 定义一个空的print函数&#xff0c;作为递归终止条件 void print(){// };// 可变参数模板函数&#xff0c;用于递归输出传入的参数 template <typename T, typenam…...

NY118NY120美光固态闪存NY124NY129

NY118NY120美光固态闪存NY124NY129 美光NY系列固态闪存深度解析&#xff1a;技术、性能与行业洞察 技术架构与核心创新 美光NY系列&#xff08;包括NY118、NY120、NY124、NY129等型号&#xff09;作为企业级存储解决方案的代表作&#xff0c;延续了品牌在3D NAND技术上的深厚…...

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(八):异步处理逻辑详解

在现代 Web 应用中&#xff0c;异步处理是实现流畅交互的核心技术。本文基于前几章实现的内容Tailwind CSS 实战&#xff1a;基于 Kooboo 构建 AI 对话框页面&#xff08;七&#xff09;&#xff1a;消息框交互功能添加-CSDN博客&#xff0c;深入解析 AI 对话框页面中异步逻辑的…...

Significant Location Change

一、Significant Location Change是什么 “Significant Location Change&#xff08;重大位置变化&#xff09;” 是苹果 iOS 系统中一项用于在应用未主动运行时&#xff0c;监测设备位置显著变化的功能。它主要通过基站、Wi-Fi 网络等信号来判断设备是否发生了有意义的位置移…...

gateway 网关 路由新增 (已亲测)

问题&#xff1a; 前端通过gateway调用后端接口&#xff0c;路由转发失败&#xff0c;提示404 not found 排查&#xff1a; 使用 { "href":"/actuator/gateway/routes", "methods":[ "POST", "GET" ] } 命令查看路由列表&a…...

自主设计一个DDS信号发生器

DDS发生器 DDS信号发生器是直接数字频率合成技术&#xff0c;采用直接数字频率合成(Direct Digital Synthesis&#xff0c;简称DDS)技术&#xff0c;把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平&#xff0c;并且可以在很宽的频率范围内进行精细的频率调节。采…...

Redisson简明教程—你家的锁芯该换了

1.简介 各位攻城狮们&#xff0c;你还在使用原生命令来上锁么&#xff1f;看来你还是不够懒&#xff0c;饺子都给你包好了&#xff0c;你非要吃大饼配炒韭菜&#xff0c;快点改善一下“伙食”吧&#xff0c;写代码也要来点幸福感。今天咱们就来聊聊Redisson提供的各种锁&#…...

StoreView SQL,让数据分析不受地域限制

作者&#xff1a;章建&#xff08;处知&#xff09; 引言 日志服务 SLS 是云原生观测和分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 提供了多地域支持【1】&#xff0c;方便用户可以根据数据源就近接入 SLS 服务&#xff0c…...