什么是Linux中的核心转储文件?它提供了哪些信息?

时间:2011-03-16 05:46:50

标签: c linux debugging coredump

linux中的核心转储文件是什么?它提供的所有信息是什么?

2 个答案:

答案 0 :(得分:12)

它基本上是正在使用的进程地址空间(来自mm_struct结构,其中包含所有虚拟内存区域),以及任何其他支持信息 * a ,在它崩溃时。

例如,假设您尝试取消引用NULL指针并接收SEGV信号,导致您退出。作为该过程的一部分,操作系统会尝试将您的信息写入文件以供以后进行事后分析。

您可以将核心文件与可执行文件一起加载到调试器中(例如,用于符号和其他调试信息),并尝试发现导致问题的原因。


* a :在内核版本2.6.38中,fs/exec.c/do_coredump()是负责核心转储的人,您可以看到它传递了信号编号,退出代码和寄存器。它又将信号编号和寄存器传递给特定于二进制格式(ELF,a.out等)的转储器。

ELF转储程序为fs/binfmt_elf.c/elf_core_dump(),您可以看到它在fs/binfmt_elf.c/fill_note_info()中输出非基于内存的信息,如线程详细信息,然后返回以输出进程空间。

答案 1 :(得分:1)

如果程序异常终止,则应记录异常终止时程序的状态以供进一步分析。并且此状态记录在核心转储文件中。

在多用户和多任务环境中,访问不属于您的资源是不可接受的。如果进程-A尝试访问属于进程B的系统资源,则它是违规的。此时,操作系统终止进程并将进程状态存储到文件中。此文件称为核心转储文件。核心转储有很多原因。我刚刚解释了核心转储的可能性之一。通常是因为SIGSEGV(分段错误)和SIGBUS(总线错误)。

核心转储文件包含发生异常终止的位置,进程堆栈,符号表等的详细信息。

有许多工具可用于调试coredump。 GDB DBX objdump的 MDB

存在编译器选项以使调试过程更容易。虽然编译提供这些标志(通常是-g)将导致在目标文件的符号表中留下额外的信息,这有助于调试器(gdb / dbx)轻松访问符号(符号引用)。