GDB再学习(11):如何生成Core文件

Posted Stoneshen1211

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB再学习(11):如何生成Core文件相关的知识,希望对你有一定的参考价值。



前面简单介绍了GDB相关的调试经验,但是在资源有限的嵌入式设备中,很难跑的了GDB ,因此就需要程序异常时候生成的core文件来解析程序的堆栈信息,这时候就需要对linux系统进行一些设置,用于程序异常时候可以生成core文件。

1 确认core文件开关是否开启

我们输入指令ulimit -a

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7735
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) 7735
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以看到上面有一行

core file size          (blocks, -c) 0

0表示core文件的大小为0,即没有打开。
因此我们可以使用指令 ulimit -c [kbytes] 来设置生成core文件的最大大小。
也可以使用 ulimit -c unlimited表示不限制core的大小。

注意:如果不限制大小,在嵌入式设备上最好确认core文件的生成路径的空间大小,否则可能生成的core过大,超过flash空间。一般可以将路径设置到SD卡或者NFS挂载到电脑路径下最好。

2 修改core生成路径和文件格式

默认生成的core的名字为core 路径为程序运行的路径。因此我们可以通过修改/proc/sys/kernel/core_pattern中参数来修改生成的路径和文件的格式。

如下:

echo "/tmp/core-%c-%e-%g-%h-%p-%s-%t-%u" > /proc/sys/kernel/core_pattern

代表生成的路径为/tmp目录,格式为core-%e-%p-%t,具体参数含义如下:

指令说明
%c文件的大小上限
%e程序的名字
%g程序进程组ID
%p程序的ID
%h主机名
%s导致本次coredump的信号
%t存储时间(UTC时间)
%u进程用户ID

比如运行前面的示例程序生成的core文件

-rw------- 1 root root 17342464 1117 19:25 /tmp/core-18446744073709551615-test_gdb-0-st-22862-11-1605612306-0

以上是关于GDB再学习(11):如何生成Core文件的主要内容,如果未能解决你的问题,请参考以下文章

GDB再学习(11):如何生成Core文件

分析树脂负载测试生成的 .core 文件

为什么gdb core文件的时候无法定位出出问题的地方

gdb调试core文件

go 程序生成 coredump 文件

gdb调试常用实用命令和core dump文件的生成(转)