c++ - 关于调试核心文件C++/linux的一些基本问题?

标签 c++ debugging memory-leaks gdb core

C++应用程序/linux的调试文件对我来说一直是个谜,缺乏一些基本的了解。

(1) 我们是否需要使用 -g 标志编译应用程序,否则核心文件将无法提供任何有用的信息?但我看到,即使我们不使用 -g 标志进行编译,也会生成核心文件——因此除了占用磁盘空间之外,它们肯定还有其他用途。

维基百科说:“在计算中,核心转储、内存转储或存储转储包含特定时间计算机程序工作内存的记录状态,通常是程序异常终止(崩溃)时”。

这应该意味着不管我们是否使用 -g 标志编译,我们仍然有状态。如果我们有堆栈跟踪,我们应该仍然能够知道是什么函数导致了错误。

最佳答案

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

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

关于c++ - 关于调试核心文件C++/linux的一些基本问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028346/

相关文章:

C++自动构造函数调用

c++ - GNU pth 与 pthread

旧应用程序的 Java 内存泄漏

linux - 当 Linux 内存不足时,如何获得有关进程的更多信息?

c# - 如何在 C# 中执行哨兵模式?

c# - 如何从单声道的 C++ 中获取某个类中所有方法的列表?

debugging - 如何调试 htaccess 重写脚本

linux - 每小时 cron 作业未运行

linux - 如何创建 Perl 调试器

php - 内存泄漏symfony和独白和控制台