【如何利用 core 文件排查系统崩溃的信息详细步骤---coredrump 文件的产生及其应用】
具体步骤:
1、配置 coredump:
A、ulimit -a 查看系统环境的 coredrump 参数,如果为 0,则表示不能产生 core 文件;
B、ulimit -c unlimited 设置其 core 文件大小可以为无限大;
C、重复 A 看看设置是否成功;
D、注意程序在哪个终端运行就必须在哪个终端配置;
E、每次运行程序时,最好都重新设置,避免配置被修改了;
F、为了保证 coredump 文件名称的唯一性,可以用下面命令设置生成 core 文件名规则:
# echo 'core.%e.%s.%t' > /proc/sys/kernel/core_pattern
2、用-g 选项编译可执行程序,并且生成的程序不能使用--strip 对可执行文件进行精简;
3、执行可执行文件,直到出现 Segmentation fault (core dumped),则表示 core 文件生成成
功;
4、使用 gdb 工具、可执行文件 和 core 文件查看错误的堆栈信息,egg: gdb a.out
core.2896;
5、使用 bt 命令查看函数调用的栈帧(用 where 命令也可以),左侧数字为栈帧:
(gdb) bt
#0 0x0084d626 in memcpy () from /lib/libc.so.6
#1 0x08048660 in ?? ()
#2 0x08049f5d in do_print (argc=1, argv=0xbf8935dc) at my_command.c:31
#3 0x08048cc2 in run_command (cmd=0x804cca0 "print") at command.c:380
#4 0x08049e93 in readline_test ()
#5 0x08049ee6 in main ()
6、使用 frame NUM 查看栈帧, 进一步定位到具体文件及其出错行数。比如,查看第 2 个栈帧:
(gdb) frame 2
#2 0x08049f5d in do_print (argc=1, argv=0xbf8935dc) at my_command.c:31
31 memcpy(p, buffer, 5);
(gdb)