visual studio 2008 解决方案发布版运行时致命错误

Posted

技术标签:

【中文标题】visual studio 2008 解决方案发布版运行时致命错误【英文标题】:visual studio 2008 solution release version runtime fatal error 【发布时间】:2012-10-09 13:08:25 【问题描述】:

我有一个 Visual Studio 2008 解决方案,它由一些项目组成,并将 dll 与他们的标题一起使用。在调试版本中,它(解决方案)工作得非常好。在发布版本中它编译成功,但是在执行一些在 dll 文件中定义的函数时它会失败。

正如我所说,该解决方案在调试模式下运行良好,并且选项设置正确。试过关掉 优化,打开调试信息,没用。问题的原因可能是什么?

【问题讨论】:

错误是什么?尝试把 __declspec(dllexport) void fn(..) 最有可能导致调试和发布行为不同的错误是未初始化的变量。 flounder.com/debug_release.htm 【参考方案1】:

我以前见过这种情况很多次。在几乎每一种情况中,发现问题是写入数组或其他数据结构时出现越界错误。在其他情况下,使用了未初始化的变量。

您的代码中有错误。这是肯定的。当您在调试设置下构建时,编译器会为您做很多事情来掩盖某些类型的问题。编译器将编写代码对一些东西进行零初始化,从而掩盖未初始化的变量问题。

我会尝试的第一件事是将警告级别提高到最高设置。无论如何,你应该一直这样做。这通常会揭示问题。请务必修复编译器告诉您的问题。不要用 #pragmas 或 chintzy casts 来掩盖它们。下一步通过您的代码来隔离问题。这可能既困难又耗时,但有一线希望。无论问题是什么,您重复该错误的可能性与识别和修复错误的时间和难度成反比。 :)

【讨论】:

是的,我现在意识到我有一个类型为 vector 的名为 deviceList 的变量,其中 'device' 是一个结构。它似乎导致了大多数问题。我在一个类中声明了它,但据我所知,STL 类“向量”调用它的构造函数来初始化 deviceList。在这里看不到任何错误。还是编译器可以因为优化而忽略声明? @Nabijon:极不可能。把任何关于编译器在这里出错的想法都抛在脑后吧。

以上是关于visual studio 2008 解决方案发布版运行时致命错误的主要内容,如果未能解决你的问题,请参考以下文章

2013年Visual Studio 2008项目解决方案

从 Visual Studio 2008 解决方案创建 Unix makefile

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案

是否可以使用 VS2008 开发版打开 Visual Studio 2008 数据库项目?

从 Visual Studio 2008 迁移到 2015

如何在 Visual Studio 2010 中使用 Visual Studio 2008 创建的 DLL?