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

C Linux中的核心转储文件是什么?它提供了什么信息?,c,linux,debugging,coredump,C,Linux,Debugging,Coredump,linux中的核心转储文件是什么?它提供的所有信息都是什么?基本上是正在使用的进程地址空间(来自包含所有虚拟内存区域的mm_结构),以及崩溃时的任何其他支持信息*a 例如,假设您尝试取消对空指针的引用并接收到SEGV信号,从而导致退出。作为该过程的一部分,操作系统会尝试将您的信息写入一个文件,以供日后进行事后分析 您可以将核心文件与可执行文件(例如,用于符号和其他调试信息)一起加载到调试器中,并四处查看以尝试发现问题的原因 *答:在内核版本2.6.38中,是负责内核转储的,您可以看到它传递了信

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

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

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

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


*答:在内核版本2.6.38中,是负责内核转储的,您可以看到它传递了信号号、退出代码和寄存器。它依次将信号号和寄存器传递给特定于二进制格式(ELF、a.out等)的转储程序


ELF转储程序是,您可以看到它在中输出非基于内存的信息,如线程详细信息,然后返回以输出进程空间。

如果程序异常终止,应记录异常终止点的程序状态以供进一步分析。该状态记录在堆芯转储文件中

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

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

有许多工具可用于调试CoreDump。 gdb dbx 反汇编 mdb


提供了编译器选项,以简化调试过程。当编译时,赋予这些标志(-g通常)将导致在对象文件的符号表中留下额外的信息,这有助于调试器(gdb/dbx)轻松访问符号(符号引用)。

信息代码转储文件的链接您不能读取吗?@Gabe-也许它们可以,但是,仅仅因为某些东西被发布到MetaSO并不意味着它是正确的。事实上,这是非常错误的,有两个原因:1)如果所有编程问题答案的最终来源都是SO,那么与其在google上查找,不如在SO上查找。询问,而不是查找,是一种更耗时、更低效的获取信息的方式。2) 因此,它不是所有编程信息的最终来源,也永远不会是该来源,而为此类信息提供单一来源的整个想法是愚蠢的。@Jim Balter,@Gabe-很公平,我没有看到这一点,并得到纠正。尽管如此,将@paxdiablo的答案——简单、连贯、有针对性,并包含一个例子——与维基百科条目相比较:超过一半的“使用…”部分过于笼统或适用于过时的技术,它与历史和格式混在一起,这里总共有三句话专门针对实际问题(Linux上的核心转储)。这里的答案比上面提供的任何一个外部链接都是一个更好的起点。全局变量信息是否可以在核心文件中获得?@Jay:变量本身将在那里,因为它们在地址空间中。有关它们的信息(例如将名称映射到位置)不可用。这是加载到调试器时从可执行文件中检索到的内容(假设可执行文件是使用调试信息编译的)。@Jay局部变量的值也将在那里,如果可执行文件有调试符号表,调试器将通过可执行文件中的符号表知道如何访问它们,例如由gcc-g创建的。(对于其他编译器,请查看它们的文档。)对我来说,地址空间是一组地址。“我认为更准确的说法是,核心文件在崩溃时是进程内存的转储。”Ben澄清到“正在使用的地址空间”。