【发布时间】:2018-11-04 00:54:32
【问题描述】:
每当我收到Segmentation Fault 错误时,我就知道我正在某个地方访问“不属于我”的内存。
在一些不明显的情况下,我不得不依赖调试工具,例如分析器(例如 Valgrind)。
不幸的是,在运行时,我只收到以下错误消息:
分段错误
没有别的了。我的问题是:
为什么程序在运行时不提供有关错误的更多信息?
Ps:这不是关于为什么会发生分段错误错误的问题:我明白为什么。
【问题讨论】:
-
这是因为计算机明显是愚蠢的。由您来破译实际出了什么问题。对此感到高兴,因为这可以挽救您的工作,并且仍然需要有人来照顾它。
-
许多编译器现在包含额外的工具来帮助搜索泄漏 (example) 和其他可能令人讨厌的情况。首先,启动并且永远不要忽略编译器警告。
-
操作系统自带工具。我只知道 MS,那个工具就是 Watson。它将记录堆栈的状态等。它会生成一个文件,您可以将该文件带回您的开发系统并启动调试器。它在过去让我头疼。
-
感谢@user2079303 指出这一点。投反对票的人,请说明为什么投反对票,以便我将来可以提出更好的问题。特别是对于这一点,我进行了研究,我能找到的只是“为什么”而不是“为什么不提供更多信息”。
-
FWIW,MacOS/X 有一个相对有用的崩溃例程——当你的程序崩溃时,会出现一个对话框,让用户可以选择查看崩溃报告(其中包括有用的调试信息,如堆栈跟踪显示崩溃线程的崩溃位置,以及其他线程当时正在做什么)。您甚至可以选择将崩溃报告邮寄给 Apple,尽管我从未见过任何有用的结果:/