如何识别在运行时导致错误的代码行

时间:2016-07-19 20:47:24

标签: debugging breakpoints

我有一个C ++代码,运行288次迭代8次,完成一组288次迭代需要一个小时。有时程序在第一个288之后崩溃,有时在第8次运行之后总共运行8次。

我想知道是否有办法知道这个代码崩溃的地方而不是我等待8个小时才看到程序崩溃。我可以在调试模式下运行它,但是调试器会显示程序崩溃,如果在常规命令提示符界面中运行它将不会崩溃。

任何建议都会受到欢迎。我已经厌倦了等待8个小时而不知道是什么原因导致这些随机崩溃。我应该对我怀疑可能导致此错误的行使用断点吗?

2 个答案:

答案 0 :(得分:0)

在不知道编程语言和功能的情况下,很难提供更详细的信息。

1)。确定导致崩溃的原因是什么?如果它在同一个地方崩溃,每次使用相同的输入数据集,那么它可能是您输入数据的某些条件。您可以使用变量记录您正在进行的迭代,然后查找数据并首先调用该迭代,假设每次迭代彼此独立。

2)。您的代码使用相同的数据崩溃到不同的位置,而不是它可能与处理数据的方式有关。例如,在尝试从另一台机器读取数据时超时,你的内存是否耗尽?

3)。可以为您的流程添加一些“智能”,以检查您希望代码崩溃并捕获并报告它们的条件。

有助于回答问题的信息。 - 什么编程语言/工具。 - 您的计算是调用第三方API还是仅调用您自己的代码? - 您的计算过程数据来自您必须阅读的内容,IE)数据库,文件等。 - 您是否正在处理此信息的读取,以便如果它无法读取,您将收到通知,并且它会优雅地处理它而不仅仅是崩溃?

答案 1 :(得分:0)

你的问题非常通用,但根据我的理解和我在12年的编程中所看到的,我猜你有一种像C ++这样的编程语言。您可能遇到内存泄漏或缓冲区溢出,并且可能在任何时间和任何地点发生崩溃,这取决于RAM的数量和/或多线程时间。

如果C ++猜测正确,我建议您查看Application Verifier。运行 Win + R 并输入appverif。它可能已经安装在您的计算机上。

添加您的应用程序并检查 Basics 组中的所有项目。保存设置。然后在调试器下运行该程序。当调试器检测到第一次内存泄漏时,它可能会更早崩溃。

Settings on a sample program

Microsoft调试器有一个特殊的命令!avrf可以与Application Verifier配合使用,但您在其他调试器中也会获得更好的结果。