Core Dumps
操作系统可以配置为当某个程序因进程终止信号(如 segmentation fault)而崩溃时,生成 core dump 文件。这个核心转储文件包含进程终止时的内存快照。可以使用 gdb 加载该文件,查看程序崩溃时的状态,这在调试中非常有用。
默认情况下,Linux 操作系统上的程序在崩溃时不会产生 core dump 文件。将 ~/.bashrc 文件中的 ulimit -c 0
改为 ulimit -c unlimited
,并运行 source ~/.bashrc
来使其立即生效,可以保证当程序崩溃时会产生 core dump 文件。
core dump 文件写在哪?
sysctl kernel.core_pattern # 查看 core pattern
sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t # 更改 core pattern
调试 core dump
通过如下命令即可查看程序崩溃时的各个栈帧的寄存器状态。
gdb <executable file name> <core dump file name>
bt 看不见栈
有时候在加载了可执行文件和core文件之后,bt 看到的栈信息可能是一堆问号,很有可能是二进制依赖的动态链接库状态不对,可以使用 info sharedlibrary
看需的依赖库,然后把所有依赖库按照原来的路径结构放到一个目录下,比如 /fakeroot,然后在 gdb 中用 set sysroot /fakeroot
,之后再加载一下 core 文件(core-file core-name
),就可以看到栈信息了。
Copyright © 2016-2024 by 赵军旺