缺少核心转储

缺少核心转储

我有一个崩溃的应用程序,它崩溃并输出:Aborted (core dumped)

现在,当我查看包含二进制文件的目录时,没有崩溃转储。

  • 没有core目录。
  • 文件系统上有可用空间
  • 用户可以在目录中创建文件。

ulimit -a印刷

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31845
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
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) 31845
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

cat /proc/sys/kernel/core_pattern印刷

core

cat /proc/sys/fs/suid_dumpable印刷

2

还有什么我可以检查的吗?我没主意了。

我正在 Ubuntu 15.04 上运行。

答案1

  • 某些操作系统允许配置系统范围的目录来放置核心文件

  • 该程序可能已更改其工作目录。 core文件位于转储core的程序的工作目录中

  • 如果发出 ulimit -c 0,则 shell 消息不应打印“core dumped”,除非操作系统有错误

答案2

要在 Linux 上生成核心转储,我们可以在运行可执行文件的初始化脚本中添加以下参数。因此,每当我们初始化软件或运行应用程序并导出环境变量时,我们都可以将以下行复制到脚本中,并转储核心,以防万一我们看到任何崩溃。

要设置核心转储的位置,您可以使用 proc 文件系统设置核心文件路径。

例如,如果您希望在/tmp/crash/corefiles.这将确保您的核心文件生成路径对于使用脚本运行的进程保持完整。

mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern

其中变量是:

%e是文件名
%G是进程运行时的 gid
%p是进程的pid
%s是导致转储的信号
%t是转储发生的时间
%u是进程运行时的 uid

另外,您必须设置核心文件大小,以下命令将核心文件大小设置为无限

ulimit -c unlimited

现在要检查进程中每个线程设置的核心文件大小,我们可以使用

cat /proc/<PID>/limits

上述命令的输出:

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max open files            10000                10000                files     
Max address space         unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             31868                31868                processes 
Max locked memory         65536                65536                bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       31868                31868                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us      

从上面的输出中我们可以看到最大核心文件大小设置为无限制。

对于您的情况,您可以按照以下步骤操作。

  • 创建一个初始化脚本,其中包含所有环境导出以及上述核心文件生成相关的更改。
  • 从初始化脚本触发您的应用程序。
  • 当发生崩溃时,您应该能够根据您设置的核心文件位置看到核心文件。
  • 您可以使用以下命令验证 core_pattern:cat /proc/sys/kernel/core_pattern并查看您的位置设置是否正确。

相关内容