【Linux环境配置】core dump配置和快速gdb调试core文件

文章目录

  • 0. 在Ubuntu系统中直接运行导致coredump的程序并没有生成core文件
  • 1. `core dump` 设置
    • 1.1 设置core文件格式
    • 1.2 设置core 大小限制
  • 2. 写个代码测一下
    • 2.1 示例代码放入 `test.c` 中
    • 2.2 编译运行
    • 2.3 gdb调试一下core
  • 3. 参考资料

0. 在Ubuntu系统中直接运行导致coredump的程序并没有生成core文件

  • 如下所示, 执行时出现异常, 虽然提示进行core dump实际上并没有产生core文件, 此时就需要配置一下了;
$ gcc -g test.c 
$ ./a.out 
Floating point exception (core dumped)
$ ll
total 32
drwxrwxr-x 2 neo neo  4096 Jan 28 20:51 ./
drwxrwxr-x 4 neo neo  4096 Jan 28 20:50 ../
-rwxrwxr-x 1 neo neo 17016 Jan 28 20:51 a.out*
-rw-rw-r-- 1 neo neo   171 Jan 28 20:51 test.c

1. core dump 设置

1.1 设置core文件格式

  • 在配置文件 /etc/sysctl.conf 中, 配置core文件的格式, 参数名称为: kernel.core_pattern, 参考配置如下:
kernel.core_pattern=core.%p.%u.%s.%e.%t
  • 查询配置是否成功 sysctl -p, 输出示例如下 :
$ sudo sysctl -p
[sudo] password for neo: 
kernel.core_pattern = core.%p.%u.%s.%e.%t

1.2 设置core 大小限制

  • 在配置文件 /etc/security/limits.conf 中, 配置core文件大小限制, 参考配置如下:
* soft core unlimited
* hard core unlimited

2. 写个代码测一下

2.1 示例代码放入 test.c

int actual_calc(int a, int b){int c;c=a/b;return 0;
}int calc(){int a;int b;a=13;b=0;actual_calc(a, b);return 0;
}int main(){calc();return 0;
}

2.2 编译运行

  • 编译运行
$ gcc -g test.c 
$ ./a.out 
Floating point exception (core dumped)
$ ll
total 156
drwxrwxr-x 2 neo neo   4096 Jan 28 20:56 ./
drwxrwxr-x 4 neo neo   4096 Jan 28 20:50 ../
-rwxrwxr-x 1 neo neo  17016 Jan 28 20:51 a.out*
-rw------- 1 neo neo 307200 Jan 28 20:56 core.25819.1000.8.a.out.1706446582
-rw-rw-r-- 1 neo neo    171 Jan 28 20:51 test.c
  • 本次运行并产生core文件: core.25819.1000.8.a.out.1706446582 ;

2.3 gdb调试一下core

  • 可以直接 gdb -c core文件名 启动调试, 也可以同时指定一下对应的程序名, 或者后续再通过 file 命令指定, 此处示例分步指定, 所以执行 l 时提示没有符号表, 需要手动加载一下;
$ gdb -c core.25819.1000.8.a.out.1706446582 
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".
Type "apropos word" to search for commands related to "word".
[New LWP 25819]
Core was generated by `./a.out'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x000055f620b4c13b in ?? ()
(gdb) l
No symbol table is loaded.  Use the "file" command.
  • 加载core对应的编译后的程序文件,里面含有代码的调试信息, 此处为 a.out 程序
(gdb) file a.out 
Reading symbols from a.out...
(gdb) l
3		c=a/b;
4		return 0;
5	}
6	
7	int calc(){
8		int a;
9		int b;
10		a=13;
11		b=0;
12		actual_calc(a, b);
(gdb) bt
#0  0x000055f620b4c13b in actual_calc (a=13, b=0) at test.c:3
#1  0x000055f620b4c171 in calc () at test.c:12
#2  0x000055f620b4c18a in main () at test.c:17
(gdb) p b
$1 = 0
(gdb) p a/b
Division by zero
(gdb) f 1
#1  0x000055f620b4c171 in calc () at test.c:12
12		actual_calc(a, b);
(gdb) l
7	int calc(){
8		int a;
9		int b;
10		a=13;
11		b=0;
12		actual_calc(a, b);
13		return 0;
14	}
15	
16	int main(){
(gdb) f 2
#2  0x000055f620b4c18a in main () at test.c:17
17		calc();
(gdb) l
12		actual_calc(a, b);
13		return 0;
14	}
15	
16	int main(){
17		calc();
18		return 0;
19	}
20	
(gdb) q
  • 注意上面加载core后, 默认堆栈在最顶端, 类似于执行了f 0的效果, 对应的就是当前出错位置, 直接执行 p a/b 得到 Division by zero, 也就是错误原因;

3. 参考资料

  • https://linuxconfig.org/gdb-debugging-tutorial-for-beginners

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

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

相关文章

MC3172 串口模块

MC3172 支持12个串口对应关系如下 串口模块初始化 第一个是uart0~11 inpin RX 脚 管脚号 outpin TX脚 管脚号 baud 波特率 read_ptr ,数据读取指针 void uart_init(u32 uart_num,u8 in_pin,u8 out_pin,u32 baud,u8* read_ptr) {INTDEV_SET_CLK_RST(uart_num,(INTDEV_RUN|…

React中antd的使用技巧

1.antd的基本使用&#xff1a; (1).yarn add antd(2).引入样式&#xff1a;import antd/dist/antd.css;(3).根据文档引入组件2.antd按需引入样式 (1).yarn add react-app-rewired customize-cra babel-plugin-import(2).修改package.json&#xff0c;内容如下&#xff1a;.....…

HCIP-三层架构实验

实验拓扑 实验需求 实验思路 配置IP地址 链路聚合 vlan配置 配置生产树 实验步骤 配置IP地址 以R1为例 <Huawei>sys [Huawei]sys r1 [r1]int g0/0/02 [r1-GigabitEthernet0/0/2]ip address 12.1.1.1 24 Jan 28 2024 17:09:03-08:00 r1 %%01IFNET/4/LINK_STATE(l…

一天吃透面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

vue中使用jweixin-module

目录 一&#xff1a;安装jweixin-module 二&#xff1a;后端配置 三&#xff1a;获取签名并注入配置 四&#xff1a;调用微信JS接口 在Vue项目中使用jweixin-module&#xff08;或通常称为jweixin&#xff0c;即微信JS-SDK的封装&#xff09;来调用微信提供的JS接口&#x…

二叉树

目录 1翻转二叉树 2对称二叉树 3二叉树的深度 最大深度 最小深度 4二叉树的结点数量 完全二叉树的结点数量 5平衡二叉树 6 中序 后序求前序 二叉树结构体如下&#xff1a; struct freenode {int data;struct freenode *lchild, *rchild;//左孩子 右孩子 }T; 1翻转二…

每日OJ题_算法_前缀和②_牛客DP35 【模板】二维前缀和

目录 二维前缀和原理 ②牛客DP35 【模板】二维前缀和 解析代码 二维前缀和原理 在一维数组前缀和算法的基础上&#xff0c;想到&#xff1a;计算二维数组前缀和&#xff0c;不就和计算一维数组前缀和一样&#xff0c;即计算每一个位置的前缀和就相当于&#xff1a; 此位置的…

qt学习:json数据文件读取写入

目录 什么是json 基本格式 例子 解析json文件数据到界面上 组合json数据文档对象 什么是json json是一种轻量级的数据交互格式&#xff0c;简单来说&#xff0c;json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互 基本格式 以…

Top100 子串

1.560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#…

VUE引入DataV报错记录

DataV官网&#xff08;不支持Vue3&#xff09;&#xff1a;Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

服务器托管与虚拟主机租用有哪些区别?

服务器托管又称为主机托管&#xff0c;是用户自身拥有一台服务器放置在数据中心的机房里&#xff0c;主要是由客户自己进行维护&#xff0c;用户自身就可以进行操作系统&#xff0c;企业将服务器放置在专用的托管服务器机房中&#xff0c;可以享受到稳定舒适的机房环境&#xf…

ARC143D Bridges

题目 把 i i i 和 i n in in 看作一个点&#xff0c;对所有 a i a_i ai​ 和 b i b_i bi​ 连边&#xff0c;得到的图称为 G G G&#xff0c;则 G G G 的割边 ( a i , b i ) (a_i,b_i) (ai​,bi​) 在原图中 ( a i , b i n ) (a_i,b_in) (ai​,bi​n) 或 ( a i n ,…

【Matlab】音频信号分析及FIR滤波处理——凯泽(Kaiser)窗

一、前言 1.1 课题内容: 利用麦克风采集语音信号(人的声音、或乐器声乐),人为加上环境噪声(窄带)分析上述声音信号的频谱,比较两种情况下的差异根据信号的频谱分布,选取合适的滤波器指标(频率指标、衰减指标),设计对应的 FIR 滤波器实现数字滤波,将滤波前、后的声音…

贪吃蛇/链表实现(C/C++)

本篇使用C语言实现贪吃蛇小游戏&#xff0c;我们将其分为了三个大部分&#xff0c;第一个部分游戏开始GameStart&#xff0c;游戏运行GameRun&#xff0c;以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现&#xff0c;但若仅仅只有C语言的知识还不够&#xff0c;我们还…

Compose开发No virtual method at(Ljava/lang/Object;I)错误【已解决】

此问题主要是在用CircularProgressIndicator时报错的&#xff0c;其他没遇到。 在升级不同版本时出现了不少问题&#xff0c;现在记录一下 1、mutableIntStateOf()函数的出现 要将此条版本更新到2.6.2及以上 implementation("androidx.lifecycle:lifecycle-runtime-ktx:…

学习笔记推荐:极客时间《Java常见错误100例》

最近&#xff0c;我有幸接触了一套非常精彩的学习笔记&#xff0c;《Java常见错误100例》。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 这套学习笔记出自极客时间&#xff0c;对于想要在 Java 开发领域深耕细作的朋友们来说&#xff0c;它无…

SpringBoot内置工具类

Collections java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合 一、排序 List<Integer> list new ArrayList<>();list.add(2);list.add(1);list.add(3);Collections.sort(list);//升序System.out.println(list);Collections.reverse(…

hot100 -字母异位词分组

题目介绍 给定一个字符串数组&#xff0c;要求将其中的字母异位词组合在一起&#xff0c;并可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[…

WPF的ViewBox控件

在WPF中&#xff0c;ViewBox是一个用于缩放和调整其子元素大小的容器控件。它可以根据可用空间自动调整子元素的大小&#xff0c;以使其适应ViewBox的边界。这使得在不同尺寸的窗口或布局中保持元素的比例和缩放变得更加容易。 ViewBox具有以下重要属性&#xff1a; Stretch&…

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…