为什么我的代码会崩溃?

Why does my code crash?

这是一个相当笼统的问题。

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

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

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

你的问题太笼统了,没有统一的答案。一般来说,错误是你的(一开始不要怀疑编译器或实现是错误的,几乎总是是错误的,不是系统!)。

首先,请仔细阅读 Halting Problem and Undecidable Problem

那么,要格外小心 undefined behavior (UB) in your code (not all of them give segmentation faults, see this)。 C++ (& C) 代码可以有很多。某些语言(Haskell、Scheme、Common Lisp....)的规范更好,UB 也更少。

具体来说,

  • 在编译器中启用所有警告和调试信息,因此如果使用 GCC (or likewise with Clang/LLVM). Sometimes you'll be happy to use some sanitizers, e.g. compile with some -fsanitize= 标志,请使用 g++ -Wall -Wextra -g 进行编译。

  • 了解如何使用调试器(例如gdb), and also valgrind

  • 进一步了解 C++,因为它是一门难懂的语言。

  • 了解并遵循编码规则和准则(例如 rule of 5)。

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

您需要 ten years 才能学习编程,请耐心等待。

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