GDB再学习(11):如何生成Core文件
Posted Stoneshen1211
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB再学习(11):如何生成Core文件相关的知识,希望对你有一定的参考价值。
系列文章目录
GDB再学习(1):前言
GDB再学习(2):编译
GDB再学习(3):GDB的启动和运行
GDB再学习(4):程序准备
GDB再学习(5):常用指令介绍
GDB再学习(5.1):常用指令介绍_print/display_查看变量或寄存器中的值
GDB再学习(5.2):常用指令介绍_examine_查看内存区域的数值
GDB再学习(5.3):常用指令介绍_backtrace_查看函数栈
GDB再学习(5.4):常用指令介绍_ptype/whatis_查看程序符号表
GDB再学习(6):断点调试之软件断点
GDB再学习(7):断点调试之硬断点
GDB再学习(8):断点调试之数据断点
GDB再学习(9):断点调试之事件断点
GDB再学习(10):线程调试相关
GDB再学习(11):如何生成Core文件
GDB再学习(12):gdb server的使用
前面简单介绍了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 11月 17 19:25 /tmp/core-18446744073709551615-test_gdb-0-st-22862-11-1605612306-0
以上是关于GDB再学习(11):如何生成Core文件的主要内容,如果未能解决你的问题,请参考以下文章