Linux coredump 使用与简介
简介
Linux coredump功能是当Linux下应用程序异常时,Linux内核默认的一种异常信号处理机制,内核会把异常信息与进程内存转储成coredump文件,程序员通过gdb工具可以离线分析应用程序异常时的情况。
使用
文件生成配置
原版coredump不压缩:
- 设置进程的coredump文件大小:ulimit -c unlimited
说明:只对当前进程有效,当前进程的子进程可以继承这一特性。默认为0,不会生成coredump
2. 设置生成coredump文件的路径以及文件名格式:
echo “/dst_dir/core-%e-%t-%s-%p” > /proc/sys/kernel/core_pattern
说明:%e 生成coredump文件的进程名
%t 时间,从1970-01-01 00:00:00开始的秒数
%s 触发coredump的signal号
%p 触发coredump的进程pid
压缩版coredump配置:
coredump文件根据进程使用内存的多少决定生成文件的大小,有时候存储空间有限,就希望能在生成的时候自动压缩一下coredump文件
- 设置进程的coredump文件大小:ulimit -c unlimited
说明:只对当前进程有效,当前进程的子进程可以继承这一特性。默认为0,不会生成coredump
2. 编辑压缩脚本coredump_gzip,存放到/path目录
#!/bin/shexec gzip -> /ata4/Log/core-$1-$2-$3-$4.gz
3.设置core_pattern
echo "| /path/coredump_gzip %e %t %s %p" > /proc/sys/kernel/core_pattern
gdb 解析
- 加载coredump文件
gdb 可执行程序 coredump文件
2.进入gdb控制台后,和正常的gdb操作类似
原理相关
1 哪些异常信号会触发coredump
看内核代码吧:
include/linux/signal.h
#define sig_kernel_coredump(sig) siginmask(sig, SIG_KERNEL_COREDUMP_MASK)#define SIG_KERNEL_COREDUMP_MASK (\rt_sigmask(SIGQUIT) | rt_sigmask(SIGILL) | \rt_sigmask(SIGTRAP) | rt_sigmask(SIGABRT) | \rt_sigmask(SIGFPE) | rt_sigmask(SIGSEGV) | \rt_sigmask(SIGBUS) | rt_sigmask(SIGSYS) | \rt_sigmask(SIGXCPU) | rt_sigmask(SIGXFSZ) | \SIGEMT_MASK )
2 当自定义了信号处理函数后,coredump文件还能生成吗
看内核代码吧:
kernel/signal.c get_signal函数
for (;;) {…if (ka->sa.sa_handler != SIG_DFL) {/* Run the handler. */ksig->ka = *ka;if (ka->sa.sa_flags & SA_ONESHOT)ka->sa.sa_handler = SIG_DFL;break; /* will return non-zero "signr" value */}…fatal:if (sig_kernel_coredump(signr)) {…do_coredump(&ksig->info);…}}…return ksig->sig > 0;
由如上代码可知,当自定义了信号处理函数,不等于SIG_DFL时,代码直接就break循环返回了,不会执行到do_coredump。
但是在一些系统任务严重异常的场景中,如在异常处理过程中重复异常,这种异常的表现一般为进程会退出,这时系统会强制设置信号处理为SIG_DFL,这时仍然会产生coredump
3 coredump文件中记录了哪些内容
看内核代码吧:
Coredump文件的生成在fs/coredump.c文件的do_coredump函数中。
- coredump文件名确定
在format_corename函数中,解析/proc/sys/kernel/core_pattern传入的字符串,确定生成的coredump文件名。其中如果一个字符串是|,则判断为通过管道的形式把生成的文件传到用户态自定义程序处理,如上面的生成压缩格式的coredump文件。
2. 文件生成
(1)文件格式选择
do_coredump函数
…file_start_write(cprm.file);core_dumped = binfmt->core_dump(&cprm);file_end_write(cprm.file);…
一般linux下程序都为elf格式,所以binfmt->core_dump最终执行的是fs/binfmt_elf.c中的elf_core_dump函数
(2)文件头
elf_core_dump函数:
…
dump_emit(cprm, elf, sizeof(*elf)))
…
(3)notes头
dump_emit(cprm, phdr4note, sizeof(*phdr4note)))
这个段用来记录异常信息
(4)vmaelf_phdr头
进程的每一段vma,记录一个头
dump_emit(cprm, &phdr, sizeof(phdr))
(5)notes头内容填充
write_note_info(&info, cprm)
(6)vmaelf_phdr内容填充
…for (i = 0, vma = first_vma(current, gate_vma); vma != NULL;vma = next_vma(vma, gate_vma))…page = get_dump_page(addr);void *kaddr = kmap(page);stop = !dump_emit(cprm, kaddr, PAGE_SIZE);
Linux coredump 使用与简介相关推荐
- linux下多进程编程简介
两年前的文章,拿过来充充门面. ------------------------ linux下多进程编程简介 ( 作者:mikespook | 发布日期:2002-12-8 | 浏览次数:272 ) ...
- linux coredump配置与调试
linux coredump配置与调试 Linux Core Dump 配置与调试 1.core文件的生成开关和大小限制 --------------------------------- 1)使用u ...
- Linux 下使用 Sar 简介
Linux 下使用 Sar 简介 提交 我的留言 加载中 已留言 介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等).Li ...
- Linux中用户的简介与管理
女主宣言 众所周知,linux是一个多用户.多任务的操作系统.那么linux是如何区分和认证用户的,系统对每个用户的授权是如何管理的,出现问题时是如何追朔每个用户在系统内的操作记录,这些就涉及到了li ...
- Linux 之systemd服务简介
Linux 之systemd服务简介 Systemd机制 systemd是Linux下的一种init软件,作用是提供更优秀的框架以表示系统服务之间的依赖关系,并依次实现系统初始化时服务的并行启动,同时 ...
- Linux用户认证方法简介
Linux用户认证方法简介 当今IT环境中,任何计算机系统都要充分考虑设计.使用和运行过程中的安全性.所以在目前主流操作系统的各个环节当中都增加了很多安全方面的功能和特性,而在众多的安全特性和功能中有 ...
- linux端口混杂模式,linux 端口混杂模式简介~
linux 端口混杂模式简介~ 设置端口混杂模式: ifconfig eth0 promisc 设置混杂 ifconfig eth0 -promisc 取消混杂 网卡工作模式有 4 种, 分别是: 广 ...
- Linux coredump文件的简单使用
Linux coredump文件的简单使用 一.简述 记-在linux端生成core文件, 及其简单利用. 二.设置可以生成core文件 2.1 查看当前系统是否已开启core文件记录 ulimit ...
- linux中/dev/shm简介与大小修改
linux中/dev/shm简介与大小修改 文章目录 linux中/dev/shm简介与大小修改 简介 实操 验证/dev/shm存储位置 修改/dev/shm 大小 简介 linux中/dev目录下 ...
最新文章
- AI一分钟 | 马斯克证实:特斯拉私有化的幕后推手是沙特主权基金;DeepMind的AI可以检测出超过50种眼疾...
- Autism Course of Yale University Fred Volkman 2
- mysql系列十、mysql索引结构的实现B+树/B-树原理
- method-dispatch/
- CMake2:版本号配置与头文件生成
- lcx转发3389数据
- Docker基础入门及示例
- Silverlight 动态调用 WebService
- adobe audition cs6 能打开mpcm文件吗?_Adobe全家桶出现这些漏洞,赶紧上官网下载补丁吧...
- 在PyQt中构建 Python 菜单栏、菜单和工具栏
- 下载与eclipse匹配的hibernate tools
- MyBatis如何返回自增的ID
- mysql2008分数约束_关于SQL2008对表中列的约束
- 电力网络安全监测装置_10月 长沙 电力监控系统安全防护技术研修班
- 怎么从抖音上直接跳转到微信呢?
- 移动医疗是什么 移动医疗应用实例
- NODE安装和使用说明,报错处理方法
- Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (checkstyle-vali
- 【题解】【循环】幂级数求和
- 华为日历登录qq邮箱的解决方案
热门文章
- LOG101/104精密对数和对数比率放大器
- 优必选与漫威合作推出首款钢铁侠智能机器人 售价1941元
- 大数据应用在医疗的五大方向
- 当贝Z1 PRO使用心得
- IDEA中使用xxx.properties文件中输入中文时乱码问题
- linux ubuntu bt5 基本配置
- H5手机/WEB抽奖程序设计(一) 初步设想和规划
- Xilinx ZYNQ 7000+Vivado2015.2系列(五)之ZYNQ的三种启动方式-JTAG、SD card、Flash
- linux文件从后往前看 more,41-9linux查看文件命令more的用法
- Mcafee email gateway 全新安装(一)