我希望我的 C++ 应用程序在崩溃时生成核心转储,因此我遵循了以下建议: https://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-the-current-directory
core
有时,当它崩溃时,它会在启动时的目录中生成一个文件(例如我的主目录),有时它会创建一个名为_usr_bin_<app_nam>.1000.crash
的文件/var/crash
。看起来两种不同的机制负责创建这些文件。
该应用程序及其调试符号是从 Debian 包安装的/usr/bin
(它被构建为 RELEASE_WITH_DEBUG_INFO)。
以下是一些相关配置:
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E
$ cat /etc/apport/crashdb.conf
[...]
databases = {
'ubuntu': {
'impl': 'launchpad',
'bug_pattern_url': 'http://people.canonical.com/~ubuntu-archive/bugpatterns/bugpatterns.xml',
'dupdb_url': 'http://people.canonical.com/~ubuntu-archive/apport-duplicates',
'distro': 'ubuntu',
# 'problem_types': ['Bug', 'Package'],
'escalation_tag': 'bugpattern-needed',
'escalated_tag': 'bugpattern-written',
},
[...]
}
$ 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) 63058
max locked memory (kbytes, -l) 64
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) 63058
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#
文件中的被crashdb.conf
插入以启用apport
,如下所建议:https://wiki.ubuntu.com/Apport
另外,当我从 中的主目录打开核心文件时gdb
,系统显示:
BFD: Warning: core is truncated: expected core file size >= 2697007104, found: 2147479552.
无法从内存中读取有效对象。这应该不是可用磁盘空间的问题。
产生两种类型的核心转储的原因究竟是什么?