debug模式下与release模式生成的exe有啥区别
我用VS2005程序,在Debug模式下生成的exe本电脑执行正常。 但release模式下生成的exe文件本电脑执行的时候有些效果显示不出来. debug模式下与release模式生成的exe有啥区别.
------解决方案--------------------
检查一下宏开关
例如是否有代码包含在宏_DEBUG里,等等
------解决方案--------------------
一般debug的程序代码是没有经过优化的 比如缓冲区被初始化0xcc这样的数据,增加栈平衡检查等。而release是经过优化的,编译器很聪明,你可以写个简单的程序然后看看release的反汇编。
至于效果你起码要说下什么效果吧?我记得以前遇到MFC的程序debug的combo box下拉正常,而release下拉不正常。
------解决方案--------------------
最原始的办法就是将DEBUG和RELEASE版本的编译选项一个个进行对比排除,再结合GOOGLE,就可以基本确定是哪个编译选项的问题了。不过一般就如LS说的,其中包括初始化,像各个变量的初始化,指针的初始化,以及部分变量的检查,指针是否越界等,在DEBUG下这些问题均有可能被编译器本身进行优化了,而RELEASE时就不做这些优化,同时,也有一些assert断言中的检查操作可能也会导致release版本未被执行。
------解决方案--------------------
debug和release版本效果不一致,是比较头疼的事
------解决方案--------------------
ms为了方便调试才诞生了DEBUG版。这也导致了MFC有两个功能一至但版本不同的类库,一个为DEBUG版,一个是RELEASE版。
DEBUG,这个版本生成的文件包含调试信息,你可以在DEV环境下很方便的调试它。而且_DEBUG宏是开着的。
RELEASE是经过优化的,不包含调试信息。生成的文件也相对较小。
这段代码如果以DEBUG编译,当你按下F5它会开始调试。而且RELEASE编译按下F5则会告诉你“不包含调试信息”。
#include <windows.h>
int main(int argc, char **argv)
{
printf("....");//在这里按下F9下个断点,然后按F5.调试一下试试
#ifdef _DEBUG
OutputDebugString("debug");
#else
printf("release");
#endif
return 0;
}
------解决方案--------------------
------解决方案--------------------
一些初始值没有初始化,堆栈破坏,基本上debug可以,但是release 不行都是这两个原因
我用VS2005程序,在Debug模式下生成的exe本电脑执行正常。 但release模式下生成的exe文件本电脑执行的时候有些效果显示不出来. debug模式下与release模式生成的exe有啥区别.
------解决方案--------------------
检查一下宏开关
例如是否有代码包含在宏_DEBUG里,等等
------解决方案--------------------
一般debug的程序代码是没有经过优化的 比如缓冲区被初始化0xcc这样的数据,增加栈平衡检查等。而release是经过优化的,编译器很聪明,你可以写个简单的程序然后看看release的反汇编。
至于效果你起码要说下什么效果吧?我记得以前遇到MFC的程序debug的combo box下拉正常,而release下拉不正常。
------解决方案--------------------
最原始的办法就是将DEBUG和RELEASE版本的编译选项一个个进行对比排除,再结合GOOGLE,就可以基本确定是哪个编译选项的问题了。不过一般就如LS说的,其中包括初始化,像各个变量的初始化,指针的初始化,以及部分变量的检查,指针是否越界等,在DEBUG下这些问题均有可能被编译器本身进行优化了,而RELEASE时就不做这些优化,同时,也有一些assert断言中的检查操作可能也会导致release版本未被执行。
------解决方案--------------------
debug和release版本效果不一致,是比较头疼的事
------解决方案--------------------
ms为了方便调试才诞生了DEBUG版。这也导致了MFC有两个功能一至但版本不同的类库,一个为DEBUG版,一个是RELEASE版。
DEBUG,这个版本生成的文件包含调试信息,你可以在DEV环境下很方便的调试它。而且_DEBUG宏是开着的。
RELEASE是经过优化的,不包含调试信息。生成的文件也相对较小。
这段代码如果以DEBUG编译,当你按下F5它会开始调试。而且RELEASE编译按下F5则会告诉你“不包含调试信息”。
#include <windows.h>
int main(int argc, char **argv)
{
printf("....");//在这里按下F9下个断点,然后按F5.调试一下试试
#ifdef _DEBUG
OutputDebugString("debug");
#else
printf("release");
#endif
return 0;
}
------解决方案--------------------
------解决方案--------------------
一些初始值没有初始化,堆栈破坏,基本上debug可以,但是release 不行都是这两个原因