zoukankan      html  css  js  c++  java
  • Linux系统编程13_CoreDump

    CORE DUMP 核心转储
    所谓核心转储是指当进程因为异常而终止时,把进程中的内存数据保存一份到硬盘上的过程。

    进程异常终止通常是因为有bug,比如野指针,除0等导致段错误,
    我们可以利用Core Dump检查文件出现异常的原因,这个过程称为事后调试。

    使用ulimit命令设置core文件的大小
    ulimit -c unlimited //设置corefile的大小为不限制大小;
    ulimit -c 1024//因为core file size的大小默认为0,通过ulimit命令设置为1024K

    定位segment fault错误思路:一般是使用gdb进行问题定位,gdb需要有core-dump文件。

    编译可执行程序时,需要加上-g选项,便于后期问题定位;

    修改corefile的输出路径,新建一个/corefile文件夹,然后输入chmod 777开设权限;
    通过echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern,来修改输出文件名格式即可;
    如果程序在运行过程中奔溃,则在/corefile目录下会自动生成对应的core-dump文件;

    gdb调试:gdb ./xxxx --core=/corefile/xxxxxxx;
    进入gdb之后,输入bt命令查看出错时的函数调用栈,会精确到具体的代码行;
    然后输入bt full, 就可以查看到详细的调用栈,这样就可以根据显示的信息,找到崩溃的地方。

    %p - 进程的pid
    %u - 当前的uid
    %g - 当前的gid
    %s - 产生coredump的信号
    %t - 产生coredump的时间戳
    %h - 主机名
    %e - 可执行文件的名称

    gdb programname
    (gdb)core core_file

    知行合一
  • 相关阅读:
    太忙了
    Delphi 的接口(2) 第一个例子
    Delphi 的接口(3) 关于接口的释放
    VS.NET让我做了一场恶梦
    [推荐阅读]The Best Of .The NET 1.x Years
    向大家说声对不起
    [致歉]16:30~17:10电信网络出现问题
    服务器恢复正常
    [SharePoint]更改活动目录(AD)中用户名的问题
    [正式决定]博客园开始接受捐助
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14651083.html
Copyright © 2011-2022 走看看