为什么我的代码会崩溃?

时间:2015-11-19 11:54:12

标签: c++ debugging runtime-error profiling

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

如果你有一个包含许多代码行的程序,那么就说C ++。 Durring编译一切正常,没有警告没有错误。但在执行程序时,突然冻结,导致崩溃。

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

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

1 个答案:

答案 0 :(得分:1)

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

首先,请仔细阅读Halting ProblemUndecidable Problem

然后,在代码中对undefined behavior(UB)非常谨慎(并非所有代码都提供segmentation faults,请参阅this)。 C ++(& C)代码可以有很多代码。一些语言(Haskell,Scheme,Common Lisp ....)更好地指定并且具有更少的UB。

具体地,

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

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

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

  • 了解并遵守编码规则和指南(例如rule of 5)。

  • 好奇并学习许多其他语言和概念(请阅读SICP并学习计划)。

您需要ten years来学习编程,所以请耐心等待。

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