2 a1051123 a1051123 于 2016.02.07 15:17 提问

VS编译选项Debug与Release的区别

这段代码为什么使用Release模式编译时和Debug不一样,Debug编译运行不会奔溃,Release会奔溃:
#include
#include
int main(){
CONTEXT* contex;
EXCEPTION_RECORD* exception;
__asm{
call seh
mov ecx,dword ptr ss:[esp+0xC]
mov contex,ecx
mov ecx,dword ptr ss:[esp+0x4]
mov exception,ecx
}

if (exception->ExceptionCode==EXCEPTION_BREAKPOINT)
{
contex->Eip+=1;
printf("发现一个int3断点\n");
__asm{
xor eax,eax
retn
}

}
printf("异常不是我触发的\n");
__asm{
    mov eax,1
    retn

seh:
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
}

__asm{
    int 3
}
system("pause");
return 0; 

}

3个回答

hopease
hopease   2016.02.07 16:02

两种模式还是有区别的,debug模式下有调试信息,内存的小范围越界有时不会表现出来;但是 release 就会容易表现出来。

a1051123
a1051123 什么叫调试信息,我用OD打开生成的exe,代码都一样,就是执行结果不一样
2 年多之前 回复
zuishikonghuan
zuishikonghuan   2016.02.07 17:49

debug模式和release区别在于,连接的C库不一样(如果动态编译,debug是msvcr…d,release是msvcr…),某些配置不一样,比如一些库的头文件中通过#ifdef判断是什么模式对代码进行修改,生成的代码不一样,比如release是实参和局部变量该多少长度就多少长度,而debug会增长从而允许小范围溢出

91program
91program   Ds   Rxr 2016.02.07 22:18

调试信息你是看不到的,但是调试过程中你一直在用。此情况下,有一部分内存存储着此类信息,所以有时小范围的越界可能是覆盖了调试信息。但是发布版本就可能引起错误了!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
vs 中release与debug的区别
vs 中release与debug的区别
VS 解决方案的配置Debug和Release有什么区别?
VS 解决方案的配置Debug和Release有什么区别? Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程 序。 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度 上都是最优的,以便用户很好地使用。
C++ 程序DEBUG和RELEASE版本的区别
Relase版本对程序作了各种优化的,使得程序在大小和速度上达到最优。Debug版本,包含程序的调试信息,方便程序员做调试。Relase版本是不利于程序的调试。
关于vs中debug和release的区别
遇到   Debug   成功但   Release   失败,显然是一件很沮丧的事,而且往往无从下手。如果你看了以上的分析,结合错误的具体表现,很快找出了错误,固然很好。但如果一时找不出,以下给出了一些在这种情况下的策略。                           1.   前面已经提过,Debug   和   Release  只是一组编译选项的差别,实际上并没有什
vs下的debug和release版本的区别
vs下的版本分类: Debug版本通常称为调试版本,通过编译选项的配合,编译的结果通常包含调试信息,可以设置断点、单步调试、使用TRACE/ASSERT等调试输出语句并且编译器不会对代码进行任何优化,可以使开发人员提供强大的应用程序调试能力。 Release版本通常称为发布版本,是为了用户的使用,一般发布版本上不允许进行调试,所以Release版本通常不包含调试信息,同
VS2010 release 和 debug 调试区别
关于VS2010 release和debug的版本区别,看到一个很详细的总结,特此留用,谢谢辛苦的作者
VS环境下Debug和Release版本的区别
说一点闲话我在大学刚刚学习编程的时候,对于Debug和Release这两个词只是处于知道的水平,并没有深入了解。因为大学时期的编程更多的是为了实现,而不是使用。所以部署这个词,在大学时和我没有任何瓜葛的。现在想起一个完整的软件工程流程都走不完。开始工作之后,工作之中涉及到了软件的部署。所谓部署就是,是把写好的程序从开发环境移植到用户的实际应用环境中去。 第一次去部署的时候,我问老大是不是要把他弄成
VS中Dubug和Release的详细区别
首先,要明白Debug和Release到底是什么。 大神的说法:        Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好
ios应用:release与debug编译方式的区别
Debug和Release仅仅是编译选项的不同,那么为什么要区分Debug和Release版本呢? Debug和Release,主要是针对其面向的目标不同的而进行区分的。 Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。 而Release通常称为发布版本,是为用户使用的,一般客户不允许在发
VC++ 工程添加 Unicode Debug 和 Unicode Release编译支持
原文地址:学习unicode 前言 昨天为了编译一个网上下载程序,下载vs2008,转换工程并加入自己的部分程序,最后还是运行不了。郁闷之余,查看错误,发现原来自己的代码有问题。比如vs2008不再支持之类的。还有就是我的代码没有“国际化”意识(从不考虑Unicode)。所以下定决心学一下unicode,结果还是令自己满意的。以下分享一些心得(哈哈,大部分网上找的),望对你有用。