MSVC ++ Debug和Release环境之间的差异

时间:2012-02-23 11:20:12

标签: visual-studio-2008 debugging visual-c++ build release

我正在处理一个非常特殊的问题:我有一个完全在Debug-Buildmode中运行的应用程序,无论我是从MSVC环境运行还是自己启动构建的可执行文件。如果我在Release-Buildmode中构建这个应用程序,当它从MSVC环境运行它时它完全正常工作,但是当我自己启动它时会显示意外行为。

调试和发布模式之间的差异可能是导致此行为的原因,为什么只有在我手动启动可执行文件时才会出现问题?

很难给出代码,因为它是一个非常大的项目,我完全不知道是什么原因导致了这个问题。程序流程基本上是:

  • 从文件中读取设置(不是问题,仔细检查读取值,并使用ini-和libconfig ++ - 库来确定)
  • 将值分配给单独的类(仔细检查传递的值)
  • 其中一个类启动一个线程(boost::thread)并触发某些事件的回调函数(如果手动执行发布版本,则不会触发这些函数)

我能想象的东西可能会导致问题,但我不确定:

  • 由于课程是由不同的人编写的,因此std::stringstd::wstring的使用之间存在不一致。我使用std::wstring(s.begin(), s.end())从一个转换为另一个,反之亦然。

这可能是我遇到问题的原因,如果是,我该如何解决这个问题?我真的很感激一些帮助。提前谢谢。

更新

  • 当我使用臭名昭着的print-debug方法时,程序不会崩溃,变量似乎没有不同的值(因为在调试器中一切正常)
  • 我已经读过,部分化变量可能会导致这个问题,并且会检查我使用的每个变量,并且每个变量都会正确初始化
  • 在单元测试中,我使用的每个模块都按预期工作(虽然我不确定每次都有正确的边框情况,因为我自己没有编写所有模块)。

更新2:

  • 在逐步禁用优化并使发布版本模式更接近调试构建模式的同时,我能够缩小问题范围:**在代码生成选项卡中,我的程序使用Multithreaded-Debug-DLL,而不是{ {1}},无论优化设置如何。

这似乎是一个很好的成就,但我对这个问题缺乏了解。

2 个答案:

答案 0 :(得分:1)

添加日志记录,或删除一些代码块。这应该可以找出问题出现的地方。对于差异,请看这里:

What is the difference between Debug and Release in Visual Studio?

答案 1 :(得分:1)

debug不使用优化在发布模式下有优化,这就是exe大小不同的原因。即使使用相同的代码,所使用的库也是不同的。您可以通过关闭优化选项来进行类似调试的发布。