coredump+gdb调试

1、什么是coredump

Coredump(核心转储)是操作系统在程序异常终止(例如由于段错误或其他严重错误)时创建的一种文件。这个文件包含了程序崩溃时刻进程的内存镜像,通常还包括程序计数器、寄存器内容和堆栈内存等信息,文件比较大。Coredump 文件的主要用途是帮助开发者在程序崩溃后进行调试,以确定导致崩溃的原因。

2、linux常见造成coredump的信号

  1. SIGQUIT (3):用户通过Ctrl+\发送的退出信号,通常会导致程序终止并生成core dump
  2. SIGILL (4):执行非法指令时发生,如尝试执行非法的机器语言指令或者损坏的代码,通常会导致程序终止并生成core dump
  3. SIGTRAP (5):由断点或其他陷阱触发的信号,常在调试过程中使用,会导致程序终止并生成core dump
  4. SIGABRT (6):由abort()系统调用产生,通常用于处理严重错误(如断言失败),导致程序终止并生成core dump
  5. SIGFPE (8):发生致命的算术错误,例如除以零或算术溢出等,通常会导致程序终止并生成core dump
  6. SIGSEGV (11):无效的内存引用或段错误,例如访问未分配的内存,通常会导致程序终止并生成core dump
  7. SIGBUS (7):硬件故障导致的无效内存访问,如对齐错误等,通常会导致程序终止并生成core dump
  8. SIGSYS (31):非法的系统调用,通常会导致程序终止并生成core dump。

3、调试 步骤

3.1 生成coredump文件

// 查看core文件储存位置
$ cat /proc/sys/kernel/core_pattern

在这里插入图片描述

// 临时更改路径:
$ echo '/path/to/coredumps/core.%e.%p.%h.%t' | sudo tee /proc/sys/kernel/core_pattern
// 这里的/path/to/coredumps/是你希望存放core dump文件的目录。%e、%p、%h、%t是可选的格式化选
// 项,分别代表可执行文件的名称、进程ID、主机名和时间戳。// 永久更改路径
// 永久更改需要编辑/etc/sysctl.conf文件,或者在/etc/sysctl.d/目录下创建一个新文件。
// 在文件中添加或修改以下行
$ kernel.core_pattern=/path/to/coredumps/core.%e.%p.%h.%t
// 然后运行以下命令来应用更改
$ sudo sysctl -p

注意:不建议永久更改,临时操作完后,即能恢复原来状态

3.2 更改生成文件大小

// 查看当前限制:运行 ulimit -a 会显示所有的资源限制。
$ ulimit -a

在这里插入图片描述

// ulimit -c [size]
// size 单位为KB
// 要将 core dump 限制设置为无限制,可以运行:
$ ulimit -c unlimited

3.3 准备崩溃程序

测试程序名:test
// 头文件 widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void do_it();private:Ui::Widget *ui;
};
#endif // WIDGET_H

// 源文件 widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <stdio.h>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::do_it()
{//定义一个字符指针变量a,指向地址1.这个地址肯定不是自己可以访问的,但是这行不会产生段错误。char* p="1";//视图更改地址1出的值,内核会终止该进程,并把core文件dump出来。*p='a';
}

// 主程序 main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.do_it();w.show();return a.exec();
}

使用debug编译,生成可执行程序:

// 执行该程序,出现段错误,并在相应目录下生成core文件
$ sudo ./test

在这里插入图片描述
在这里插入图片描述
注意:确认文件是不是core文件方法
在这里插入图片描述

3.4 gdb调试崩溃程序

// 使用gdb调试
$ sudo gdb test /path/to/coredumps/core.%e.%p.%h.%t

在这里插入图片描述

3、gdb调试基本指令

请添加图片描述

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

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

相关文章

CH09_避免浪费

Flyweight模式 享元模式&#xff08;Flyweight&#xff09;&#xff0c;运用共享技术有效地支持大量细粒度的对象。 类图 说明 Flyweight&#xff08;轻量级&#xff09; 按照通常方式编写程序会导致程序变重&#xff0c;所以如果能够共享实例会比较好&#xff0c;而Flyweigh…

idea右上角浏览器图标没有idea内部浏览器怎么显示

idea右上角浏览器图标没有idea内部浏览器怎么显示 file -> settings -> tools -> web brosers 选择需要的浏览器&#xff0c;勾选上展示到编辑器中 打开上图的Built-in Preview&#xff0c;就会显示idea标志的内部显示了&#xff01;&#xff01;&#xff01;

UWB 技术及应用

超宽带技术为工业自动化提供独特优势&#xff0c;是首要的室内定位技术。 UWB 因其相对于 RFID、BLE 或 WiFi 等同类技术的众多优势而被认为是室内定位技术的黄金标准。它是基于位置的自动化的理想解决方案。 UWB 结合了短光速脉冲&#xff0c;可在宽带宽上精确测量信号到达时…

错误0x80070091(目录不是空的) 解决方案

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读问题产生&#xff1a;解决方案&#xff1a;方法一&#xff1a;方法二&#x…

Linux下进程控制

文章目录 创建进程fork创建进程fork返回值写诗拷贝fork常规用法fork失败的原因 进程终止进程正常终止查看进程退出码_exit函数exit函数exit 和 _exit 的区别return退出 进程等待进程等待的方式wait方法(系统调用)waitpid方法(系统调用) WEXITSTATUS 和 WIFEXITED阻塞等待和非阻…

Windows 安装Hyber-V,并创建虚拟机

文章目录 Hyper-V名词解释Hyper-V 有哪些功能&#xff1f;Windows 上怎么启用Hyber-V1&#xff0c;通过“设置”启用 Hyper-V 角色2&#xff0c;使用 PowerShell 启用 Hyper-V3&#xff0c;使用 CMD 和 DISM 启用 Hyper-V 利用Hyper-V创建一个虚拟机 Hyper-V名词解释 Hyper-V …

科研绘图(一)山脊图

从今日开始&#xff0c;为大家开辟一个新的系列科研绘图。同一个竞赛下&#xff0c;大家都近乎相同的解题思路下。之所以能出现一等二等三等奖的区别很大部分都在于结果的可视化&#xff0c;为了能更好地帮助大家进行可视化&#xff0c;今后将专门推出一个可视化板块&#xff0…

解决方案|镭速助力汽车行业实现数据高速传输数字化进程

在新一代信息技术驱动的数字经济时代&#xff0c;数据已然成为新型生产要素&#xff0c;是国家基础性资源和战略性资源&#xff0c;在汽车市场全球化背景下&#xff0c;产品、数据跨境、区域协同将成为车企未来常态。 1、数字时代&#xff0c;车企数据管理面临新课题 汽车产业…

使用Nonebot编写QQ机器人

使用 NoneBot 这个工具&#xff0c;来编写 QQ 机器人。 安装基础软件 一、安装 NoneBot 库 直接使用 pip 安装即可 pip install nonebot二、安装酷Q 软件和 HTTP API 插件 酷Q 软件可以直接到官网下载&#xff0c;https://cqp.cc/b/news&#xff0c;或者可以到网盘下载&am…

互斥、自旋、读写锁的应用场景

互斥、自旋、读写锁的应用场景 锁&#x1f512;1、互斥锁、自旋锁2、读写锁&#xff1a;读写的优先级3、乐观锁和悲观锁总结&#xff1a; 锁&#x1f512; ​ 多线程访问共享资源的生活&#xff0c;避免不了资源竞争而导致错乱的问题&#xff0c;所以我们通常为了解决这一问题…

虚拟机Ubuntu网络配置

电脑有两个系统&#xff0c;windows系统和ubuntu系统&#xff0c;那网卡到底给哪一个用呢&#xff0c;所以要选择桥接模式&#xff0c;就可以共用网卡 但是我们电脑网卡&#xff0c;有线网卡&#xff0c;无线网卡&#xff0c;到底使用哪个网卡&#xff0c;所以选择桥接到自动或…

Word中的书签

书签是一种标记&#xff0c;用于标记文档中的特定位置&#xff0c;以便稍后快速导航到该位置。 我常用的是WPS里面的Word 1、如何使用书签 书签在插入选项卡下可以找到。 点击书签后&#xff0c;设置好书签名称&#xff0c;添加即可。 接下来在视图选项卡中找到导航窗口。选…

docker搭建部署mysql并挂载指定目录

Docker是一种轻量级、可移植的容器化平台&#xff0c;可以简化应用程序的部署和管理。在本文中&#xff0c;我们将探讨如何使用Docker来搭建和部署MySQL数据库&#xff0c;并将数据和配置文件挂载到外部目录&#xff0c;以实现数据持久化和方便的配置管理。 1: 安装Docker 首…

基于蚁群算法的TSP问题建模求解(Python)

基于蚁群算法的TSP问题建模求解 一、蚁群优化算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;1.1 蚁群算法的起源——“双桥实验”1.2 蚁群优化算法思想1.3 蚁群算法应用于求解组合优化问题 二、基于蚁群算法的TSP问题建模求解2.1 旅行商问题&#xff08;…

格式工厂怎么转换视频方向

格式工厂因为其免费、操作简单、功能齐全的多重优势&#xff0c;深受大家的喜欢。格式工厂具有可以转换视频、音频、去水印、转换GIF、图片转换、PDF合并、PDF转换等功能&#xff0c;然而在对视频进行剪辑的时候&#xff0c;往往会发现找不到格式工厂的转换视频方向的功能&…

Kibana错误【Kibana server is not ready yet】

docker部署kibana成功后&#xff0c;访问http://localhost:5601 ,页面返回“Kibana server is not ready yet” 运行 docker logs kibana 后提示 该错误提示为kibana的版本和es的版本不一致&#xff0c;将两个组件的版本更新一致即可 还有另外一种错误 在kibana的kibana.yml配…

AI老照片上色-DeOldify

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 老照片上色原理 2…

windows10+ubuntu20.04双系统中,ubuntu系统显示home空间不足的扩容方法

实际上网上有两种扩容方法&#xff0c;除了本文的方法外&#xff0c;另一种是在使用启动U盘打开试用ubuntu&#xff0c;应该涉及到nvidia显卡驱动问题故未采用。另一种即本文。 最开始安装双系统时内存分配没有分配好&#xff0c;给ubuntu系统分配的空间较小,导致了后来的的问…

Multimodal Segmentation of Medical Images with Heavily Missing Data

F是mapping function 吐槽 图3太简单了吧。作者未提供代码

iOS14 Widget 小组件调研

桌面小组件是iOS14推出的一种新的桌面内容展现形式。 根据苹果的统计数据&#xff0c;“一般用户每天进入主屏幕的次数超过90次”&#xff0c;如果有一个我们应用的小组件在桌面&#xff0c;每天都有超过90次曝光在用户眼前的机会&#xff0c;这绝对是一个顶级的流量入口。 “…