1、vim core_dump_test.c
#include <stdio.h>
void main()
{
int stack_of[100000000];
int b=1;
int* a;
*a=b;
}
2、gcc -g core_dump_test.c -o core_dump_test
3、./core_dump_test
Segmentation fault (core dumped)
4、生成core文件分析
4.1、ulimit -c unlimited
如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf。
4.2、再次执行:
./core_dump_test
Segmentation fault (core dumped)
ls
core core_dump_test core_dump_test.c
5、gdb core_dump_test core
gdb core_dump_test core
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from core_dump_test...done.
[New LWP 3008]
Core was generated by `./core_dump_test'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 main () at core_dump_test.c:6
6 int b=1;
(gdb) q
GDB中键入where,就会看到程序崩溃时堆栈信息(当前函数之前的所有已调用函数的列表(包括当前函数),gdb只显示最近几个),我们很容易找到我们的程序在最后崩溃的时候调用了core_dump_test.c 第7行的代码,导致程序崩溃。注意:在编译程序的时候要加入选项-g。您也可以试试其他命令, 如 fram、list等。更详细的用法,请查阅GDB文档。