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

How to easily figure out where and why a program crashed?

本文关键字:位置 崩溃 程序 何轻松      更新时间:2023-10-16

我目前正在编写一个程序(在c++中,使用Code::Blocks),该程序使用大量随机数,需要一段时间才能开始;大多数时候,它工作得很好,但偶尔它会执行非法操作,必须关闭。鉴于随机数得到处都是,事实上,目前需要~ 3 - 5分钟的计划达到的阶段发生错误(这个时间是正常的/可接受),复制可靠方便的问题非常困难,和报告每隔一行代码cout手动跟踪事情很耗时间,直观地杂波与缺陷报告事情,并不总是有益的,因为即使我知道当程序停止,我有时不知道为什么。

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

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

调试器应该能够告诉您非法指令发生时程序的状态,并且您将对程序的状态有一些了解。从那里你可以找出什么是错误的,或者你可以做几个可能触发错误的小测试用例。

调试不能系统重现的问题是一种痛苦,祝你好运!

听起来你需要一个调试器。使用GDB调试C和c++程序