【发布时间】:2020-10-14 09:17:47
【问题描述】:
我目前很难理解在软件构建后随机发生的某种行为。该软件由多个模块组成,构建完成后,在执行过程中会出现分段错误而退出。
我已经确定了在执行过程中发生这种行为的两个不同步骤。
- 软件在执行某项任务时因 seg 错误而退出。
- 任务完成后软件退出并出现段错误。
在某些情况下,根本不会发生段错误。问题是,使用调试版本只会向我显示第二种情况的原因(这是由调用第三方库引起的)。但我真的无法确定为什么会这样。
这是使用 gcc (SUSE Linux) 7.5.0 构建的 32 位版本。
【问题讨论】:
-
返回版本控制系统,直到达到没有发生崩溃的状态。然后通过签入继续签入,直到发生。检查先前(工作)和当前(非工作)签入之间的差异。如果您不使用版本控制系统,请将此作为开始使用版本控制系统的课程(并手动完成所有回滚)。
-
我也想出了这个想法,但它似乎与系统有关,因为无论我回到多远,它仍然会发生......
-
我知道这是非常具体的,但可能是声明的变量仍然未定义吗?这可能会导致运行之间出现问题,尤其是在它用于访问数组时。
-
没有minimal reproducible example,我们无能为力
-
这些崩溃的问题在于它们通常是由未定义的行为引起的。导致未定义行为的错误可能会在代码库中存在很长时间,而不会导致您可能与该部分代码相关联的任何明显问题或崩溃。第一步是提高编译器的警告级别,并使用多个编译器来构建代码库并修复(而不是静默)这些警告。之后,您可能需要使用静态分析器进行进一步检查。