When the system is configured with Coredump, the operating system produces a core file in the specified directory in the file name format when the program terminates abnormally. The core file is a program memory image and related debugging information, debugging the Coredump file through gdb to know the cause of the program's abnormal termination.
1. System Configuration Coredump
The first is to open the Coredump, through the ulimit command to see if Coredump open:
[Email protected] coredump]# Ulimit-AcorefileSize (blocks,-c) Unlimiteddata seg size (Kbytes,-d) unlimitedscheduling priority (-e)0fileSize (blocks,-f) unlimitedpending signals (-I.)7903Max locked Memory (Kbytes,-L) -max memory Size (Kbytes,-m) unlimitedopen files (-N)1024x768Pipe Size ( +Bytes,-p)8POSIX message queues (bytes,-Q)819200Real- TimePriority (-R)0stack size (Kbytes,-s)8192CPU Time(Seconds,-t) Unlimitedmax user processes (-u)7903virtual Memory (Kbytes,-v) UnlimitedfileLocks (-X) Unlimited
The value of the core file size configuration entry is unlimited, which indicates that Coredump is open and does not limit the size of the core files. If the core file size configuration item has a value of 0 indicating that Coredump is not open, you can pass the command:
Ulimit-c Unlimited
To open the system's coredump.
Specify the path to the core file and the file name format of the core file:
Echo " 1 " >/proc/sys/kernel/core_uses_pid
The Core_uses_pid file can control whether the resulting core file has PID, set Core_uses_pid to 1 so that the resulting core file with the PID of the corresponding process as the end of the file.
Echo " /corefile/core-%e-%p-%t " >/proc/sys/kernel/core_pattern
Core_pattern controls the file name format of the core file and the resulting path of the core file, which causes the system to generate the core file in the/corefile directory, The file name format of the core file is similar to core-test-17129-1402996666 (core-executable name-process PID number-generation time).
2, an example of generating coredump files
The following program will cause a fragment error due to illegal memory access, causing the program to terminate abnormally, the system automatically generates a core file.
#include <stdio.h><stdlib.h>void Test () { char' ABC"; ' x ' ;} int Main (intChar* * argv) { test () ; return (exit_success);}
When the program is compiled and executed, the program terminates abnormally and produces a core file:
[Email protected] coredump]#/testsegmentation fault (core dumped)
3, gdb debug Coredump file, determine the cause of abnormal termination of the program
To the/corefile directory to find the core file that was generated by the program, GDB debugs the core file:
[Email protected] coredump]# GDB test/corefile/core-test-17525-1403006130GNU gdb (gdb) Red Hat Enterprise Linux (7.2- -. El6) Copyright (C) .Free software Foundation, Inc.license GPLv3+: GNU GPL version3or later //gnu.org/licenses/gpl.html>This is FreeSoftware:you is FreeTo change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type"Show Copying" and"Show Warranty" fordetails. This GDB is configured as"X86_64-redhat-linux-gnu". For bugs reporting instructions, please see://Www.gnu.org/software/gdb/bugs/>, .....Reading symbols From/home/coredump/test ... Done. [New Thread17525]missing separate Debuginfo forTry:Yum--disablerepo='*'--enablerepo='*-debug*' Install/usr/lib/debug/.build-ID/ -/19e7405069cf9fce3e07d2cc9f284ed6e5c40freading symbols from/lib64/libc.so.6... (No debugging symbols found) ... Done. Loaded symbols for/lib64/libc.so.6Reading symbols from/lib64/LD-linux-x86- -. So.2... (No debugging symbols found) ... Done. Loaded symbols for/lib64/LD-linux-x86- -. So.2Core is generated by './test'.Program terminated with Signal One, segmentation fault.#0 0x0000000000400484 inchTest () at test.c:77*s ='x'; Missing separate Debuginfos, Use:debuginfo-Installglibc-2.12-1.107. el6.x86_64 (GDB)
As can be seen from the information above, the reason for the program to terminate abnormally is that a segment error has occurred and can be specifically targeted to the program statement that caused the segment error.
Above is simple coredump function of use method, Play happy!!!