2012-06-14 18 views
0

C++应用程序/ linux的调试文件一直是我的一个谜,缺乏一些基本的理解。 (1)我们是否需要用-g标志编译应用程序,而不用核心文件就不能提供任何有用的信息?但是我发现,即使我们不用-g标志编译,也会生成核心文件 - 所以除了占用磁盘空间外,它们还必须具有某种功能。有关调试核心文件的一些基本问题C++/linux?

Wikipedia说:“在计算中,核心转储,内存转储或存储转储由计算机程序在特定时间的工作内存的记录状态组成,通常当程序异常终止时(崩溃)” 。

这应该表示不管我们用-g标志编译,我们仍然有状态。如果我们有堆栈跟踪,我们仍然应该能够知道哪个函数导致了错误。

回答

2

-g选项与核心文件无关,只是将调试信息放在程序中。也就是说,生成的可执行文件将包含所有符号(例如函数和变量名称)以及行号信息(以便您可以找出发生崩溃的行)。

实际的核心转储只包含内存转储。是的,你可以和程序一起得到堆栈跟踪信息,但除非程序有调试信息,否则你不能看到函数名或行号,只能看到它们的地址。

+0

这取决于。如果您还没有剥离可执行文件,公共符号(那些在C++中具有外部链接的符号)仍然可用。 –

1

所以必须分开占用的空间在磁盘上服务某种目的

您可以限制核心文件的大小与ulimit -c $limit命令和你的核心文件将不占用你的硬盘空间。

而且,Joachim已经说过-g选项只包含调试符号和检查程序。