`
yesjavame
  • 浏览: 689546 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行

阅读更多

在VC中当整个工程较大时,软件时常为出现在DEBUG状态下能运行而在RELEASE状态下无法运行的情况。由于开发者通常在DEBUG状态下开发软件,所以这种情况时常是在我们辛苦工作一两个月后,满怀信心的准备将软件发行时发生。为了避免无谓的损失,我们最好进行以下的检查:

1、时常测试软件的两种版本。

2、不要轻易将问题归结为DEBUG/RELEASE问题,除非你已经充分对两种版本进行了测试。

3、预处理的不同,也有可能引起这样的问题。
出现问题的一种可能性是在不同版本的编译间定义了不同的预处理标记。请对你的DEBUG版本的软件试一下以下改动:

  • 在"Project Setting(ALT-F7)" 中的C/C++项中设置目录(category)为"General",并且改动"_DEBUG"定义为"NDEBUG".
  • 设置目录为"Preprocessor"并且添加定义"_DEBUG到"Undefined Symbols"输入框.
  • 选择Rebuild ALL,重新编译.
如果经过编译的程序产生了问题,请对代码进行如下改动:
  • 将ASSERT() 改为 VERIFY()。因为ASSERT中的内容在Release版本中不被编译。
  • 找出定义在"#ifdef _DEBUG"中的代码,如果在RELEASE版本中需要这些代码请将他们移到定义外。
  • 查找TRACE(...)中代码,因为这些代码在RELEASE中也不被编译。
所以请认真检查那些在RELEASE中需要的代码是否并没有被编译。

4、变量的初始化所带来的不同,在不同的系统,或是在DEBUG/RELEASE版本间都存在这样的差异,所以请对变量进行初始化。

5、是否在编译时已经有了警告?请将警告级别设置为3或4,然后保证在编译时没有警告出现.

6、是否改动了资源文件.

7、此外对RELEASE版本的软件也可以进行调试,请做如下改动:

  • 在"Project Settings" 中 "C++/C " 项目下设置 "category" 为 "General" 并且将"Debug Info"设置为 "Program Database".
  • 在"Link"项目下选中"Generate Debug Info"检查框。
  • "Rebuild All"
如此做法会产生的一些限制:
  • 无法获得在MFC DLL中的变量的值。
  • 必须对该软件所使用的所有DLL工程都进行改动。

另:
MS BUG:MS的一份技术文档中表明,在VC5中对于DLL的"Maximize Speed"优化选项并未被完全支持,因此这将会引起内存错误并导致程序崩溃。

<!--article end-->
分享到:
评论

相关推荐

    vc2005sp1 debug 库缺失导致程序无法运行

    标题 "vc2005sp1 debug 库缺失导致程序无法运行" 描述了一个常见的问题,即当尝试运行一个依赖于Microsoft Visual C++ 2005 Service Pack 1 (SP1) Debug库的程序时,由于缺少相应的库文件,程序无法启动。描述中的...

    vs2008 CRT运行库,MFC运行库(Debug、Release)

    在VS2008中,CRT分为Debug和Release两个版本。Debug版本包含额外的调试信息,有助于在开发过程中定位错误;Release版本则优化了性能,适合发布给最终用户。在部署应用时,需要根据程序的构建类型选择对应的CRT库。 ...

    vc debug版本详解0812

    在debug模式下,开发者可以轻松地设置断点并进行单步执行,观察程序在每一步的行为,这对于理解复杂逻辑或追踪难以捉摸的bug极为有用。在上文示例中,通过设置断点并跳转至汇编码,我们可以看到程序在运行时的底层...

    VC Debug 和 Release的区别

    Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 在 Debug 版本中,有一些重要的编译选项,例如 /MDd /MLd 或 /MTd,它们使用 Debug Runtime ...

    未安装VC时运行debug版所需dll

    "未安装VC时运行debug版所需dll"这个主题涉及到的是,在没有安装Visual C++(VC)开发环境的情况下,尝试运行编译为调试版本(Debug版)的程序可能遇到的问题。 Visual C++是一个用于开发Windows应用程序的集成开发...

    VC下关于debug和release的不同的讨论

    这些断言只在Debug模式下激活,如果在Release模式下程序仍能正常运行,但Debug模式下报错,这通常意味着Release模式下忽视了一些错误,而不是没有错误。开发者应当仔细检查代码,消除ASSERT触发的错误。 4. 调试宏...

    vc Release版本调试

    1. **启用断点**:尽管在Release版本中调试时可能无法单步执行代码,但仍然可以通过设置断点来观察程序运行时的状态变化。 2. **日志记录**:在关键位置添加日志输出语句,可以帮助追踪程序执行流程以及变量值的变化...

    VC6.0将程序打包成一个可执行文件(release)

    在生成 Release 版本后,我们可以在主目录下找到 Release 文件夹,里面的 exe 文件可以独立运行。 需要注意的是,如果我们使用了 MFC,需要使用静态编译,否则程序将不能正常运行。在 Project-&gt;general-&gt;Microsoft ...

    VC-Debug-Release]出错的问题解决办法

    在调试 VC 程序时,经常出现 Release 版本或者 Debug 版本运行崩溃的问题,本文给出了多种解决方法,以帮助开发者解决这些问题。 一、内存分配问题 在 Debug 版中,变量会自动初始化,但是 Release 版中不会。因此...

    VC90_debug_release_mfc_crt.zip

    总结来说,"VC90_debug_release_mfc_crt.zip"是一个实用的工具,它解决了在不安装完整Visual Studio 2008的情况下,运行依赖VC9 CRT和MFC库的应用程序的问题。通过理解这些库的作用和用法,开发者能够更有效地进行...

    visual studio不显示Debug,Release的原因及解决办法

    在使用Visual Studio进行C++开发时,有时可能会遇到IDE不显示“Debug”和“Release”配置的情况,这对于软件开发过程中的调试和发布是至关重要的。本文将深入探讨这个问题的原因,并提供有效的解决办法。 首先,...

    x86_microsoft.vc80.debug.8.0.50727.42

    总的来说,这个压缩包对于那些需要运行或调试使用Visual C++ 2005开发的Debug版本程序的用户来说是至关重要的。正确安装和配置这些库可以确保程序的正常运行,并提供有效的调试支持。同时,理解WINSXS的工作原理以及...

    vs2008 运行库(包括Debug和Release版)

    总结来说,VS2008运行库包括Debug和Release两个版本,它们对于VS2008或VS2008SP1编译的程序运行至关重要。VS90运行库是这一特定版本的特定集合,而SP1的引入增强了库的稳定性和兼容性。64位版本的运行库,如VC_x64...

    最新curl 动态库 -7.65.2 vc6 xp平台 下的 编译版本,含dll lib文件 debug和release双版本

    本文将详细介绍如何在VC6下编译curl 7.65.2动态库,并探讨其dll和lib文件在debug和release模式下的使用。 首先,我们关注的是编译过程。对于curl库,编译过程通常包括预处理、编译、链接等步骤。在XP环境下,由于...

    vc的debug和release版本之区别详解

    很不错的介绍,对于编译的调试很有帮助

    VS2013/2015 VC运行时 RELEASE x86

    描述中的“VS2017发布VS2015加载VS2013于win7正常运行,发布程序于Windows系统配置安装”意味着尽管Visual Studio 2017被用来进行操作,但它能够支持和兼容使用Visual Studio 2015和2013编译的C++应用程序在Windows ...

    x86_microsoft.vc80.8.0.50727.42.debug

    安装DEBUG版本的运行时库并不影响已经存在的RELEASE版本,两者可以并存,因为WinSxS机制可以确保正确版本的库被加载。 总的来说,"x86_microsoft.vc80.8.0.50727.42.debug"是针对开发者的,用于调试使用Visual ...

    VC2008_MFC_CRT_DEBUG_RELEASE_amd64

    VC2008_MFC_CRT_DEBUG_RELEASE_amd64版本 BC2008的MFC运行库, CRT运行库, debug和release, amd64版本, 统一打包到一起, 多线程 DLL (/MD) 方式编译的exe 与这个包的文件放在一起, 在任何windows系统下就都可以运行了

    zlib 1.2.11 的windows x64编译版本,包含debug和release

    Debug版本的库通常包含额外的检查和调试信息,便于开发者在程序出错时定位问题。Release版本则经过优化,去除了调试信息,旨在提供更快的运行速度。在使用Zlib时,开发者可以根据项目需求选择适合的版本。 在编译...

    vs2008环境dll;debug+release版本;mfc所需dll;

    在标题和描述中提到的"debug+release版本"指的是针对两种不同编译配置的DLL文件:Debug和Release。 **Debug版本**: 在开发过程中,开发人员通常使用Debug版本的DLL,因为它们包含更多的调试信息,有助于在代码出错...

Global site tag (gtag.js) - Google Analytics