0
点赞
收藏
分享

微信扫一扫

LeetCode //C - 327. Count of Range Sum

曾宝月 2024-08-26 阅读 25

一、首先检查

$ 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")

 

举报

相关推荐

0 条评论