怎么让linux程序产生core文件
怎么让linux程序产生core文件详细介绍
在 Linux 系统中,要让程序产生 core 文件(核心转储文件),可以按照以下步骤操作:
1. 启用 core 文件生成
首先需要确保系统允许生成 core 文件。可以通过以下命令设置:
bash
unlimited
这个命令会将当前 shell session 的 core 文件大小限制设置为无限制。若要使设置永久生效,需编辑/etc/security/limits.conf文件,添加如下内容:
plaintext
<username> hard core unlimited<username> soft core unlimited
其中,<username>代表用户名,若要让所有用户都生效,可使用*。
2. 配置 core 文件保存位置和命名格式(可选)
可以通过修改/proc/sys/kernel/core_pattern文件来设定 core 文件的保存位置与命名格式。例如,执行下面的命令让 core 文件保存在当前目录,并且文件名包含程序名、PID 等信息:
bash
/proc/sys/kernel/core_pattern
常见的格式说明符如下:
%e:程序文件名%p:进程 ID%t:时间戳%h:主机名
若想让设置永久生效,要编辑/etc/sysctl.conf文件,添加或者修改这一行:
plaintext
kernel.core_pattern = %e.core.%p
之后执行sudo sysctl -p使设置生效。
3. 触发程序崩溃
让程序崩溃从而生成 core 文件的方法有很多,下面是一些常见的方式:
示例程序(会引发段错误)
c
ptr
ptr
将上述代码保存为test.c,然后编译并运行:
bash
gcc test.c./test
程序运行后会崩溃,若前面的设置都正确,就会在当前目录生成类似test.core.12345的文件。
4. 分析 core 文件
可以使用 GDB 来分析生成的 core 文件:
bash
gdb ./test test.core.12345
进入 GDB 后,使用bt命令就能查看程序崩溃时的调用栈:
plaintext
(gdb) bt
常见问题及解决办法
- core 文件没有生成:
- 检查
ulimit -c的输出,若不是unlimited,可执行ulimit -c unlimited。 - 查看是否有足够的磁盘空间。
- 确认程序是否有写入文件的权限。
- 检查
- core 文件被生成到了其他目录:
- 检查
/proc/sys/kernel/core_pattern的设置。 - 查看是否存在 apport 等系统服务拦截了 core 文件。
- 检查
通过上述步骤,你就能在 Linux 系统中让程序产生 core 文件,并利用这些文件进行调试分析。