如何准确定位程序崩溃的位置

时间:2014-04-10 14:31:43

标签: c++ visual-studio-2012 crash

我成功构建了一个程序,可以运行一段时间。然后它总是在某个时候崩溃。我是编程的新手,我在Visual Studio中唯一知道的工具是使用Call Stack来跟踪调用哪些函数。但是,我仍然无法确定哪些函数确实导致了问题,因为我没有看到任何异常或抛出断言。任何有关可能的解决方案的建议或相关教程的指导将不胜感激。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用调试工具?

左键单击代码左侧(行号左侧)。应该弹出一个红点。然后点击播放(使用调试选项),你可以逐步看到你的程序。

失败时会输出错误代码。找出它的含义。

调试是一个很棒的工具,你可以看到你的程序一步步走,看看它崩溃的地方。

这也可能是基本的,但我建议逐步向您的代码添加cout语句,以查看它失败的位置。

答案 1 :(得分:0)

你需要学习的第一件事是崩溃有原因,而且有一个原因。那些通常是不一样的。例如,如果取消引用空指针,则可能会发生崩溃(当然在Visual Studio中)。但原因通常是更早,你应该检查。

如果您取消引用已删除的指针(类似但不相同),则会发生类似类型的崩溃。 Visual Studio将在两种情况下(C0000005)为您提供访问冲突,但故障指针不同。这里没有检查会有所帮助。聪明的指针会有所帮助。

一个强大的工具是使用类不变量设计类。这是始终 true的对象的属性。例如,在String类中,不变量将是Size属性等于字符串中的字符数。对于双链表,前向和后向指针是一致的。通常,此不变量涵盖private数据,并且所有类方法都保持不变。由于其他代码无法访问私有方法,因此无法破解不变量。

如果添加一个(调试)函数来检查此不变量,则可以检查哪些对象仍然有效。通常只有一个破碎的物体。然后你就知道bug必须包含一些可以改变private数据的代码。