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

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

Solutions Collecting From Web of "什么是Linux中的核心转储文件? 它提供了什么信息?"

它基本上是使用的进程地址空间(来自包含所有虚拟内存区域的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/elf_core_dump() ,你可以看到它在fs/binfmt_elf.c/fill_note_info()输出非基于内存的信息,如线程细节,然后返回输出进程空间。

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

在多用户和多任务环境中,访问不属于您的资源是不可接受的。 如果一个进程-A试图访问属于进程-B的系统资源,那么这是违反的。 此时,操作系统杀死进程并将进程状态存储到文件中。 这个文件被称为核心转储文件。 core dump有很多原因。 我只是解释了核心转储的一个可能性。 通常会由于SIGSEGV(分段错误)和SIGBUS(总线错误)。

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

有许多工具可用于调试coredumps。 gdb dbx objdump mdb

有编译器选项可以使调试过程更加简单。 而赋予这些标志(通常为-g)的编译将导致在目标文件的符号表中留下额外的信息,这有助于调试器(gdb / dbx)轻松访问符号(符号引用)。