linux不生成core dump文件

2023-05-16

今天尝试core dump功能调试,发现一直没法生成崩溃dump文件

代码如下:

#include"iostream"
using namespace std;                                                            
int main(){
    int a = 10; 
    //cin>>a;
    int b = 0;
    cout << a << b << endl;
    int c = a/b;
    cout<<a/b<<endl;
    system("pause");
    return 0;
}

尝试方法:

  1. core dump文件大小设置成10000个block(通过指令ulimit -c 10000)

  1. ulimit -c unlimited 可以设置core dump文件大小不限制;(只在当前shell有效)

  1. 修改vim ~/.bashrc,添加: ulimit -c unlimited,使生效:source ~/.bashrc

  1. 查看dump文件存放目录是否在当前目录下

查看dump文件处理方式:cat /proc/sys/kernel/core_pattern

默认输出:| /usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E,最前面的管道'|'即将dump出来的文件给到脚本处理,所以不会对崩溃文件做存储;

以下是参数列表:

%p - insert pid into filename 添加pid

%u - insert current uid into filename 添加当前uid

%g - insert current gid into filename 添加当前gid

%s - insert signal that caused the coredump into the filename 添加导致产生core的信号

%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间

%h - insert hostname where the coredump happened into filename 添加主机名

%e - insert coredumping executable name into filename 添加命令名

需要执行:echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern,将崩溃文件存储到/data/coredump文件夹下面,如果没有这个文件夹需要手动创建;

  1. 如果再运行执行文件的时候还是没有生成core dump文件,尝试切换到root权限下运行;

  1. 在root权限下,也需要修改vim ~/.bashrc,添加: ulimit -c unlimited,使生效:source ~/.bashrc

  1. exit退出root权限;

  1. 再运行执行文件时,就看到/data/coredump 文件夹下看到生成的dump文件

  1. 软件重启时,又出现不能生成core dump文件的现象

发现是core的生成路径(/proc/sys/kernel/core_pattern里的内容)又被篡改为

|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E

原因是因为第二步的修改只是对此次系统运行生效,重启后会被修改(具体原因还没搞明白)

解决方法:

  1. 再次执行步骤2;

  1. 修改/etc/sysctl.conf配置文件,添加

  kernel.core_pattern=core-%e-%p-%t
  kernel.core_uses_pid=1

下次电脑重启时,这个内容不会被修改,但是/proc/sys/kernel/core_pattern里的内容还是会被修改,需要 再次执行 sysctl -p 即可;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux不生成core dump文件 的相关文章

随机推荐

  • 暗黑破坏神 2 私服 sf 114.215.178.67

    注册表 REGEDIT4 HKEY CURRENT USER Software Blizzard Entertainment Diablo II 34 BNETIP 34 61 34 114 215 178 67 34 1 11b 原版 Q
  • Linux下NVIDIA驱动手动安装

    1 查看当前电脑的显卡型号 lshw numeric C display 执行完毕后我的显卡型号为 GTX 960M xff1a 2 下载NVIDIA官方驱动 到NVIDIA的官方驱动网站下载对应显卡的驱动程序 xff0c 下载后的文件格式
  • mysql checksum table golang

    package main import 34 bytes 34 34 database sql 34 34 fmt 34 34 github com go sql driver mysql 34 34 io ioutil 34 34 reg
  • golang context.WithTimeout 超时处理

    lt span style 61 34 font size 18px color 3333ff 34 gt package main import 34 golang org x net context 34 34 log 34 34 ma
  • supervisord 启动后 ulimit 参数未生效

    bin bash supervisord This scripts turns supervisord on Author Mike McGrath lt mmcgrath 64 redhat com gt based off yumupd
  • postgresql 定时vacuum脚本

    coding utf 8 import pg multiprocessing lst 61 34 dbname 34 34 postgres 34 34 host 34 34 127 0 01 34 34 port 34 5432 34 u
  • 空闲时间的处理:OnIdle,以消息循环过程中为例(顺便解释PeekMessage与GetMessage的不同)

    所谓空闲时间 xff08 idle time xff09 xff0c 是指 系统中没有任何消息等待处理 的时间 举个例子 xff0c 没有任何程序使用定时器 xff08 timer xff0c 它会定时送来WM TIMER xff09 xf
  • 七层网络学习

    七层网络协议 OSI协议 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 传输层 xff1a TCP IP协议 xff0c 就是在数据包外面在加一层 xff0c 加的数据是源端口和目标端口 xff1b 网络层 xff1a 在数据
  • 生成m个长度在n以内的随机字符串

    开发环境 xff1a VS Code xff08 1 45 1 xff09 include lt stdio h gt include lt stdlib h gt include lt time h gt define M 15 defi
  • windows下MFC定时器开发学习

    在VS2010中新建一个项目 xff0c Visual C 43 43 gt MFC gt MFC应用程序 xff0c 命名为 Timer gt 确定 xff0c 选择MFC向导建立基于对话框 xff1b 2 在自动生成的对话框模板中 xf
  • MFC 获取与更新控件

    EDIT控件 xff1a 获取控件值 xff1a CString str GetDlgItem IDC EDIT1 gt GetWindowText str IDC EDIT1为控件ID 更新控件值 xff1a CString str 61
  • TypeError: Expected ‘Iterator‘ as the return annotation for __iter__ of ExperienceSourceDataset

    问题 xff1a 使用pl bolts时产生错误 TypeError Expected 39 Iterator 39 as the return annotation for iter of ExperienceSourceDataset
  • 为什么调用了KillTimer()函数后,还是会进入OnTimer函数?

    今天写MFC定时器代码时 xff0c 发现调用了KillTimer 函数后 xff0c 还是会进入OnTimer函数 实现如下 xff1a 通过按钮控制定时器的开关 按钮回调函数 void CtimerDlg OnBnClickedButt
  • linux GDB调试

    前言 GDB调试 xff08 GNU debug xff09 是unix下的调试工具 xff0c 可以调试C和C 43 43 xff1b 程序怎么才能使用GDB xff1f 编译的时候加上 g xff0c 保留调试参数 xff1b 如果是别
  • 为什么基类的析构函数必须是虚函数

    因为当定义基类的指针指向子类对象时 xff0c 在调用析构函数的时候 xff0c 如果析构函数是虚函数 xff0c 那么就会调到子类的析构函数 xff0c 所以如果子类申请了新的内存的话 xff0c 那这块的内存就能被释放 xff1b 但是
  • python

    获取输入 获取string输入 xff1a str1 61 str input 获取数字输入 xff1a num1 61 int input
  • linux指令学习

    find 根据文件的名字查找 find name 34 list c 34 或者 find name 39 list c 39 xff1a 查找根目录下 xff0c 名字为list c的文件 grep 根据文件的内容查找 grep n he
  • windows快捷键

    1 非常实用的截图 xff1a shift 43 windows键 43 s
  • NLP思维

    前言 想让自己的思维有深度 xff0c NLP思维逻辑必须要会 xff01 通常在低层次的问题在高层次能轻易找到解决方法 xff0c 如果在同层次或者更低层次寻找解决问题的办法 xff0c 往往会消耗更多的精力 NLP思维分层 xff1a
  • linux不生成core dump文件

    今天尝试core dump功能调试 xff0c 发现一直没法生成崩溃dump文件 代码如下 xff1a include 34 iostream 34 using namespace std int main int a 61 10 cin