【问题标题】:How to easily figure out where and why a program crashed?如何轻松找出程序崩溃的位置和原因?
【发布时间】:2011-10-05 02:49:04
【问题描述】:

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

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

【问题讨论】:

    标签: c++ debugging crash codeblocks


    【解决方案1】:

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

    当非法指令发生时,调试器应该能够为您提供程序的状态,并且您将对程序所处的状态有所了解。从那里您可以找出问题所在,或者您可以制作几个可能触发错误的较小测试用例。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 2014-12-01
        相关资源
        最近更新 更多