C++应用程序/linux的调试文件对我来说一直是个谜,缺乏一些基本的了解。
(1) 我们是否需要编译带有 -g 标志的应用程序,否则核心文件无法提供任何有用的信息?但我看到,即使我们不使用 -g 标志进行编译,也会生成核心文件——所以除了占用磁盘空间之外,它们必须有其他用途。
维基百科说:“在计算中,核心转储、内存转储或存储转储由计算机程序在特定时间的工作内存的记录状态组成,通常是在程序异常终止(崩溃)时”。
这应该意味着无论我们是否使用 -g 标志编译,我们仍然有状态。如果我们有堆栈跟踪,我们应该仍然能够知道是什么函数导致了错误。