我正在编写一个 C++ 软件图像处理工具。该工具工作正常,但突然停止,它从不发送任何异常或任何崩溃或任何东西都不会让我哪条线路或哪个区域发生崩溃。
在这种情况下,我如何确定错误代码?
你可以做几件事:
首先,它听起来更像是一个无限循环、死锁,或者就像您正在使用所有系统资源,而且它只是在放慢速度并花费很长时间(可能是无限的)。如果是这种情况,您将不得不通过调试找到它。
您可以尝试的事情 - 不一定按此顺序:
查找您正在使用的共享变量。您是否有可能与线程和互斥锁发生死锁?考虑一下并尝试解决它。
检查未初始化的变量/指针的使用。有时(很少)当您调用未定义的行为时会出现非常奇怪的行为 - 我不是 Windows C++ 开发人员(我在 Linux 上工作),但这并不是我第一次看到因分段错误而导致的锁定。
将错误输出 (std::cerr/stderror) 添加到您的处理逻辑中,这样您就可以看到它崩溃的程度。之后,设置一个条件以在该点附近捕获它,以便您可以在调试器中看到它发生并查看变量的状态以及可能出现的问题。
做一个堆栈跟踪,这样你就可以看到最近命中了哪些调用。这至少会让你知道最后执行的函数链。
您以前使用过堆栈跟踪吗?
查找有关如何使用它们的 MSDN 文档。根据您的应用程序,它们具有不同类型的堆栈跟踪。
你可以
从第一个开始。