如何轻松地找出程序崩溃的位置和原因
How to easily figure out where and why a program crashed?
我目前正在编写一个程序(在c++中,使用Code::Blocks),该程序使用大量随机数,需要一段时间才能开始;大多数时候,它工作得很好,但偶尔它会执行非法操作,必须关闭。鉴于随机数得到处都是,事实上,目前需要~ 3 - 5分钟的计划达到的阶段发生错误(这个时间是正常的/可接受),复制可靠方便的问题非常困难,和报告每隔一行代码cout
手动跟踪事情很耗时间,直观地杂波与缺陷报告事情,并不总是有益的,因为即使我知道当程序停止,我有时不知道为什么。
是否有办法让我看到程序崩溃前的最后一个操作是什么,以及为什么这个操作会导致崩溃?CodeBlocks内部的东西是最好的,但第三方的东西也可以。它还需要是我每次测试程序时都可以使用的东西,因为我永远不知道什么时候会发生崩溃。
这就是调试器的作用。使用完整的调试符号构建系统,配置系统以便获得完整的崩溃报告(在linux中是一个核心文件),然后使用核心文件启动调试器(或者在调试器中运行整个程序,但这可能需要一段时间,在调试器中运行通常比在调试器外运行要慢得多)。
调试器应该能够告诉您非法指令发生时程序的状态,并且您将对程序的状态有一些了解。从那里你可以找出什么是错误的,或者你可以做几个可能触发错误的小测试用例。
调试不能系统重现的问题是一种痛苦,祝你好运!
听起来你需要一个调试器。使用GDB调试C和c++程序
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 程序崩溃并显示"std::out_of_range"错误
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 程序的守护程序版本崩溃时的查找位置
- 如何找到检测到 Cuda API 错误时程序崩溃的位置:cudaMemcpy 返回 (0xb)
- 确保程序在运行时出错时在 C++/fortran 中的适当位置崩溃
- MEMCPY 后崩溃:访问冲突读取位置
- 使用"CS:EIP 上的字节数"找出崩溃发生的位置
- 确定应用程序崩溃的确切位置
- 调用MiniDumpWriteDump()以捕获崩溃的最佳位置
- 如何轻松地找出程序崩溃的位置和原因
- 通过WinAPI套接字连接到蓝牙设备时崩溃(读取位置0x00000004时发生访问冲突)
- PageHeap 不显示确切的崩溃位置