c++ - Release模式下异常, Debug模式下不异常

标签 c++ release-mode

当我在 Debug模式下运行此代码时,没有出现异常,但在 Release模式下我收到此异常:

Unhandled exception at 0x768b4b32 in RealTimeSLT.exe: Microsoft C++ exception: cv::Exception at memory location 0x003de734..

为什么这个问题只有在发布时才会出现?如何解决?

FileStorage fs2(fileName, FileStorage::READ);
fs2.open(fileName, FileStorage::READ);
fs2["Mat"] >> Mat;  
fs2["dMat"]>> dMat; 
fs2.release();

最佳答案

假设您在 VS 中运行,选择“调试”->“异常”并单击“抛出异常时中断”

在调试器下运行应用程序,看看为什么抛出该异常以及它提示什么 - 这很可能与应用程序运行的环境不同。

如果您需要检查变量,那么发布构建会使这变得困难,因为优化器可能会使调试器感到困惑。您也许可以通过关闭发布版本中的优化来解决此问题。但是,如果是时间问题,这可能会隐藏问题。

另一个选项是捕获抛出的异常,然后记录其内部消息 - 这通常是一个名为“what()”或类似的函数。这很可能会指出实际问题。无论如何,您可能都想捕获此异常。

如果其未定义的行为导致发布和调试之间的差异,那么上面的内容可能不会那么有用。

关于c++ - Release模式下异常, Debug模式下不异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16649357/

相关文章:

c++ - GCC 中树莓派的交叉编译。从哪儿开始?

android - 应用程序在发布时崩溃,而在调试时不会

windows-phone-8 - Windows Phone 8 后台代理仅在使用调试版本时运行(似乎不在发布版本上运行)

c# - Silverlight 4 应用程序在发布版本中显示空白页面

c++ - 如何在 Qt 中取消设置标志?

c++ - 即使从类中抛出异常,C++ 程序还能正常运行吗?

c++ - 编译器可以优化多个相同的函数调用吗

c++ - 从守护进程启动的控制台应用程序捕获输出

c# - 如何检查程序集是使用调试还是发布配置构建的?

c++ - 如何在 Release模式下自动注释行?