C++应用程序/linux的调试文件对我来说一直是个谜,缺乏一些基本的了解。
(1) 我们是否需要使用 -g 标志编译应用程序,否则核心文件将无法提供任何有用的信息?但我看到,即使我们不使用 -g 标志进行编译,也会生成核心文件——因此除了占用磁盘空间之外,它们肯定还有其他用途。
维基百科说:“在计算中,核心转储、内存转储或存储转储包含特定时间计算机程序工作内存的记录状态,通常是程序异常终止(崩溃)时”。
这应该意味着不管我们是否使用 -g 标志编译,我们仍然有状态。如果我们有堆栈跟踪,我们应该仍然能够知道是什么函数导致了错误。
最佳答案
-g
选项与核心文件无关,但与将调试信息放入程序有关。也就是说,生成的可执行文件将包含所有符号(例如函数名和变量名)以及行号信息(以便您可以找出崩溃发生在哪一行)。
实际的核心转储只包含一个内存转储。是的,您可以与程序一起获得堆栈跟踪,但除非程序具有调试信息,否则您看不到函数名称或行号,只能看到它们的地址。
关于c++ - 关于调试核心文件C++/linux的一些基本问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028346/