如何轻松找出程序崩溃的位置和原因?

时间:2011-07-14 07:37:01

标签: c++ debugging crash codeblocks

我目前正在开发一个程序(在C ++中,使用Code :: Blocks),它使用大量随机数并需要一段时间才能开始;大部分时间,它工作正常,但它偶尔会执行非法操作,必须关闭。鉴于遍布整个地方的随机数,以及目前程序达到错误发生阶段(此时间范围正常/可接受)需要约3-5分钟的事实,可靠且方便地再现问题极其重要很难,并且报告每个其他代码行cout以手动跟踪事物是耗时的,视觉上混乱报告与错误无关的事情,并不总是有用,因为即使我知道程序什么时候停止,我有时候不知道为什么。

有没有办法让我看到程序中的最后一个操作在它崩溃之前是什么,让我看看为什么这个操作会导致崩溃? CodeBlocks中的某些内容最好,但第三方也可以使用。它也需要是我每次测试程序时都可以使用的东西,因为我永远不知道什么时候会发生崩溃。

2 个答案:

答案 0 :(得分:0)

听起来你想要一个调试器。 Debugging C and C++ programs using GDB

答案 1 :(得分:0)

这就是调试器的用途。使用完整的调试符号构建系统,配置系统以便获得完整的崩溃报告(在linux中为核心文件),然后使用核心文件启动调试器(或者在调试器中运行整个程序,但这可能需要一段时间,在调试器内部运行通常比在其外部运行要慢得多。

调试器应该能够在非法指令发生时为您提供程序状态,并且您将获得有关程序所处状态的一些见解。从那里你要弄清楚什么是错的,或者你可以制作一些可能触发错误的小型测试用例。

调试无法系统再现的问题是痛苦的,祝你好运!