linux core dump学习

 

linux core dump学习

分类: linux学习笔记   643人阅读  评论(0)  收藏  举报

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是用来干什么的?
sh-# cat /proc/506/coredump_filter
00000023
sh-#

可以通过
# man core
命令来查看,core dump filter中的每个bit对应一种类型的数据,比如:
bit0 dump anonymous private mappings.
bit1 dump anonymous shared mappings.
...
设定了相应的bit,即意味着进程崩溃时相应类型的内存数据就会dump下来。
通常core dump filter的设定值为3.
# echo 3 > /proc/<PID>/coredump_filter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值