为什么我的代码会崩溃

Why does my code crash?

本文关键字:崩溃 代码 我的 为什么      更新时间:2023-10-16

这是一个相当普遍的问题。

如果你有一个有很多行代码的程序,比如说C++。在编译过程中,一切运行良好,没有警告,没有错误。但在执行程序的过程中,突然冻结,导致崩溃。

如果你几乎没有关于这可能发生的地方的信息(可能是循环,可能是指针,可能是错误的初始化,可能是…),如何解决这个问题?

是否有任何技术或评测器可以跟踪程序执行的当前行?

你的问题太宽泛,没有一般的答案。通常情况下,错误属于您(一开始不要怀疑编译器或实现是错误的,几乎总是是错的,而不是系统!)。

首先,仔细阅读关于停止问题和无法解释的问题。

然后,对代码中的未定义行为(UB)要格外小心(并不是所有行为都会出现分段错误,请参阅此)。C++(&C)代码可以有很多这样的代码。有些语言(Haskell、Scheme、Common Lisp…)被更好地指定,UB更少。

具体来说,

  • 在编译器中启用所有警告和调试信息,因此如果使用GCC(或类似的Clang/LLVM),请使用g++ -Wall -Wextra -g进行编译。有时您会很乐意使用一些消毒程序,例如使用一些-fsanitize=标志进行编译。

  • 学习如何使用调试器(例如gdb),以及valgrind

  • 了解更多关于C++的信息,因为它是一种困难的语言。

  • 理解并遵循编码规则和指导方针(例如规则5)。

  • 保持好奇心并学习许多其他语言和概念(因此请阅读SICP并学习Scheme)。

你需要十年的时间来学习编程,所以要有耐心。

PS。我有偏见的建议是在你的笔记本电脑上安装Linux。