zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    [开源]WinForm 控件使用总结
    类型转换一种处理方式
    [算法]斐波那契数列
    [算法]1 − 2 + 3 − 4 + …
    [算法]冒泡排序
    [开源]基于Log4Net简单实现KafkaAppender
    基于Log4Net本地日志服务简单实现
    项目打jar包,怎么把第三放jar包一起打入
    将博客搬至CSDN
    将字段转换为阿拉伯数字
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3301760.html
Copyright © 2011-2022 走看看