linux core dump学习
1. core dump是什么?
core dump又叫核心转储,当操作系统收到特定的signal时,
会生成某个进程的core dump文件。这样程序员可以根据
已经生成的core dump文件来debug查错。
gdb -c core_file ./main
bt
这样就能看到函数的调用栈了,不过很多时候这个调用栈信息
对debug来讲可能是没用的。
2. 如何确认linux系统是否启动了core dump功能?
通过ulimit -c来查看,如果是0说明core dump功能是关着的;
如果是unlimited则说明系统已经打开了core dump功能。
3. 如何开启或关闭core dump功能?
ulimit -c unlimited用来开启core dump功能;
ulimit -c 0则用来关闭core dump功能。
4. umilit命令是干什么的?
ulimit命令通过一些参数选项来管理不同种类的系统资源,
比如-c选项即用来指定core文件的大小。
所以通过ulimit -c可以查看当前系统已经设定的core文件的大小;
通过ulimit -c unlimited可以设置core文件为无限大,也就是
启动了core dump功能了。
ulimit -a可以显示所有的limit信息。
5. 当程序crash时,core dump文件会放到哪里去?
cat /proc/sys/kernel/core_pattern可以查看core dump文件的放置位置,
用户可以根据需要自行设定。例如用户想要将core dump文件放到USB
根目录,可以通过如下的命令来设定:
echo /mnt/usb/sda1/core_%e_sig%s_pid%p > /proc/sys/kernel/core_pattern,
其中%e,%s,%p是core_pattern可以设置的格式符,%e表示命令名,
%s表示产生core dump的signal,%p表示产生core dump的process的PID。
6. 哪些情况不会产生core dump文件?
linux很多signal默认都会产生core dump文件的,
关于这部分我们会放到linux signal那里做详细的讨论,
此处省略一千字。
7. 如何测试所做的core dump配置是否正确?
ulimit -c unlimited
echo /mnt/usb/sda1/core_dump > /proc/sys/kernel/core_pattern
echo 1 > /proc/sys/kernel/core_uses_pid
做了以上设置后,再:
ulimit -c
cat /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_uses_pid
查看设置是否正确。如果设置都正确的话,
先用ps -A | grep process_name找到需要测试的process的PID。
kill -11 pid向pid这个process发生SIGSEGV。由于core dump文件
通常都很大,所以稍等一会你再去检查/mnt/usb/sda1/,你会发现
下面多了一个类似于core_xx的文件了。
由于SIGSEGV的默认动作会产生core dump文件,所以首先你得确保
你的process没有去接管SIGSEGV,这样kernel才会默认去处理。
如果你的process接管了这个signal,那你可以用其它的一些signal
做实验,因为默认会产生core dump文件的signal有很多。
8. core dump的应用有哪些?
(1) process不预期的崩溃掉。这时如果能取到core dump文件的话,
对解决问题可能会有很大帮助;
(2) 程序卡住或死锁时,发送诸如SIGSEGV等能够默认产生core dump
文件的signal给你的process。借助于core dump文件,可能会高效的
解决问题。
关于core dump的应用,后续有条件会再补充一些实验及实验结果。
9. /proc/PID/coredump_filter是用来干什么的?
关于这部分内容,还需要study更多的跟linux相关的知识之后才能回答。
等到时机成熟时,再补充回来,sorry。
linux core dump学习的更多相关文章
- 【转】 Linux Core Dump 介绍
=============================================================== Linux core dump的祥细介绍和使用 =========== ...
- Linux core dump file详解
Linux core dump file详解 http://www.cnblogs.com/langqi250/archive/2013/03/05/2944931.html
- Linux Core Dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 core dump 是“内存快 ...
- linux core dump 文件 gdb分析
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- Segment fault及LINUX core dump详解 (zz)
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...
- Segment fault及LINUX core dump详解
源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...
- Linux Core Dump【转】
转自:http://www.cnblogs.com/hazir/p/linxu_core_dump.html 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中 ...
- linux core dump 生成和调试
core dump 某些信号的产生会导致产生core dump,包含了进程终止时的内存镜像.在某些时候这个core文件就非常的有用处,配合gdb或者lldb调试起来非常方便. 更详细的文档参考 Lin ...
- Linux core dump总结
文章链接:https://www.cnblogs.com/Anker/p/6079580.html 1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发 ...
随机推荐
- SQL Profile 总结(一)
一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...
- Neral的前言
大家好,我是Neral,我准备写一个js库. 在动笔之前,我一直都处在很忐忑的状态,因为我写代码讲究的是一种感觉,那是看到自己写的代码之后大脑中就出现之后的无数个编码分支的快感,但是,如果很长一段时间 ...
- SSAS数据集Cube不存在或者尚未处理
对Microsoft SQL Server(2008) Analysis Services(以下称SSAS) 多维数据集运行多维表达式 (MDX) 查询时,会返回这个错误消息:XXX Cube不存在, ...
- jq不识别拼接的对象id的解决方案
今天在做项目时,遇到了这么个问题. 先声明一下,我的id都是动态变换的.从1-10呢. <div id="a1"></div> <div id=&qu ...
- IOS添加自定义字体库
1.将需要的字体库xxx.ttf添加到工程中,注意一定要在copy bundle resources中存在,如果没有添加上去 2.在info.plist 文件中添加 fonts provided by ...
- 移动平台中 meta 标签的使用
一.meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name). 1.http-equiv 属性的 Content-Type 值(显示字符集的设定) 说明:设定页面 ...
- Python学习笔记整理(十一)Python的while和for循环
while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块.break,continue用在循环内,跳出整个循环或者跳出一次循环. 一.while ...
- nsfocus-笔试题
1.描述sendmail原理及通讯机制 sendmail程序接受到待发邮件后,通过关键字@判断邮件的格式是否符合要求,匹配成功后提取邮件后缀域名信息并查询DNS数据库相关MX(邮件专用)记录,若有匹配 ...
- Java虚拟机--虚拟机编译器
void sspin() { short i; for (i = 0; i < 100; i++) { ; // Loop body is empty }} Method void sspin( ...
- MongoDB资料--Java驱动, Hadoop驱动, Spark使用
MongoDB数据库备份: mongodump -h 192.168.1.160 -d MapLoc -o /usr/local/myjar/mongo/MapLoc/数据库还原:mongoresto ...