我做了以下更改:
编辑文件/etc/security/limits.conf
,以便核心文件大小为“无限制”。使用显示为“无限制”的命令#ulimit -c
对其进行验证。
根据以下内容附加文件/etc/sysctl.conf
:
kernel.core_uses_pid = 1
kernel.core_pattern = /tmp/%e.core.%p
fs.suid_dumpable = 2
使用sysctl -p
编译文件如下:
$gcc -g pointer.c -o pointeraccess
结果成功编译
按如下方式在GDB中执行文件:
$gdb pointeraccess
获得算术异常后,输出如下:
(gdb)运行
启动程序:/ media / anand / d258641a-8cc6-4fcf-96e4 -
ce7a147cb34e /重要/调试工作区/ pointeraccess
编程接收信号SIGFPE,算术异常。
在pointeraccess.c的主要()中的0x08048477:13
13 i = i / 0;
(gdb)gcore
保存的corefile core.1880
我的问题是:为什么文件名是core.pid
而不是program_name.core.pid
?
答案 0 :(得分:1)
更新核心模式:
echo "core.%e.%p" > /proc/sys/kernel/core_pattern
%e表示二进制文件的名称
使用上面的模式,我能够拥有包含可执行文件名和pid的核心转储。
编辑:
在GDB之外运行会导致核心文件中的文件名。使用GDB运行它,我想gcore会控制它。