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

问题描述 投票:12回答:2

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

c linux debugging coredump
2个回答
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
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.