ubuntu 不生成core 的可能原因

一、首先检查

$ cat /proc/sys/kernel/core_pattern

$ 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

系统当前的/proc/sys/kernel/core_pattern设置为:

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

这意味着当程序崩溃时,核心转储(core dump)会被传递给apport工具进行处理,这是Ubuntu等基于Debian的发行版中的默认行为。apport通常用于收集崩溃信息并报告错误,但它可能不会在当前目录下生成传统的core文件。

为了在程序崩溃时生成标准的core dump文件,您常数进行以下步骤:


禁用Apport服务

首先,我们需要禁用apport服务,以便让系统直接生成core dump文件。

方法1:临时禁用Apport

这将在当前会话中禁用apport,但在系统重启后会恢复。

sudo systemctl stop apport.service

sudo systemctl stop apport.service

方法2:永久禁用Apport

编辑/etc/default/apport文件,将enabled设置为0

sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport

然后,停止apport服务:

sudo systemctl stop apport.service

二、查看设置Core Dump文件大小限制

如果0,则需要设置下

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15135
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15135
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

临时设置

ulimit -c unlimited

永久设置

将以下行添加到您的shell配置文件(例如,~/.bashrc~/.bash_profile)中:

echo "ulimit -c unlimited" >> ~/.bashrc source ~/.bashrc

注意如果设置为0后,是不可逆的,这时候需要重启可以终端

$ ulimit -c unlimited
$ ulimit -c 0
$ ulimit -c unlimited
bash: ulimit: core file size: cannot modify limit: Operation not permitted

当你尝试执行ulimit -c unlimited,并且遇到“Operation not permitted”错误时,可能的原因是你已经将core文件大小限制设置为0(即禁用core dump),然后试图重新更改它。这种行为在某些系统上被认为是不可逆的,特别是在当前shell会话中。

解释与背景

在许多Linux系统中,ulimit命令允许用户设置和查询shell及其子进程的资源限制。ulimit -c选项用于设置core dump文件的大小限制。

  • 当你设置ulimit -c 0时,实际上是在当前shell会话中禁用了core dump功能。
  • 某些系统在你将core dump限制设置为0之后,会禁止在同一会话中将其再度更改为非零值。这是一种安全措施,防止用户在禁用后又意外重新启用core dump。

解决方法

1. 开启新的shell会话

因为ulimit设置通常只在当前shell会话中生效,最简单的方法是启动一个新的shell会话,然后设置ulimit -c unlimited

 三、检测是否加编译g标志

如果是cmake可以使用

# 如果需要调试信息,以便生成core dump,可以添加以下标志

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值