2015-11-19 105 views
0

這是一個相當普遍的問題。爲什麼我的代碼崩潰?

如果你有一個包含許多許多代碼行的程序,我們可以說C++。 Durring編譯一切正常,沒有警告沒有錯誤。但在執行程序時突然間凍結,導致崩潰。

如何解決這個問題,如果你幾乎沒有可能發生這種情況的信息(可能是循環,可能是指針,可能是錯誤的初始化,可能是......)。

是否有任何技術或跟蹤程序執行的當前行的分析器?

+5

瞧!你剛纔問了世界上的調試器。 – therainmaker

+2

你怎麼知道如何使用'debugging'標籤,但你從來沒有聽說過調試? – user463035818

+1

如果堆棧溢出自動將「調試」標籤放在那裏,那麼它就是圖靈測試的候選者。如果沒有,那麼你的問題就是修辭。 – Bathsheba

回答

1

你的問題太寬泛了,沒有一般的答案。一般來說,的bug是你的(先不要懷疑編譯器或執行出錯,幾乎總是你的都是錯的,不是系統!)。

首先仔細閱讀Halting ProblemUndecidable Problem

然後,在代碼中非常謹慎的undefined behavior(UB)(並非所有人都給segmentation faults,請參閱this)。 C++(& C)代碼可以有很多。一些語言(Haskell,Scheme,Common Lisp ....)更好地被指定並且具有更少的UB。

具體地說,

  • 能夠在你的編譯器所有警告和調試信息,所以用g++ -Wall -Wextra -g編譯如果使用GCC(或同樣與Clang/LLVM)。有時候你會很樂意使用一些消毒劑,例如用some -fsanitize=標誌進行編譯。

  • 學習如何使用調試器(例如gdb),並且還valgrind

  • 學習更多有關C++,因爲它是一個困難的語言。 (例如rule of 5)。

  • 好奇並學習許多其他語言和概念(所以讀SICP和學習計劃)。

你需要ten years學習編程,所以要耐心等待。

PS。我有偏見的建議是在你的筆記本電腦上安裝Linux。

+0

謝謝我正在照顧'valgrind'和那種 – user3085931

+1

這還不夠。你需要理解C++和你的程序的語義,這真的很難。而且你還應該使用'gdb' –

+0

我對它並不陌生我只需要離問題所在的地方近一步 – user3085931