选择Debug模式编译出的程序总是出Debug Assertion Failed异常,而选择Release却无法正确编译?

abcdwell 2011-02-10 02:19:56
写好一个程序后,想编译成.exe文件,
当选择Debug模式时,可以正确编译出.exe文件,
但是,当运行这个程序时,却时常出现Debug Assertion Failed这个异常,并弹出窗口说在xxx行有错误之类……
经常遇到这种情况,很是郁闷,,,,


baidu/google咨询说用Release模式编译可以去除这些异常,
于是选择Release模式编译,却出现了很多错误,根本就无法编译,

这是怎么回事??

为什么同样一段程序用Debug和Release模式编译会出现如此大的差异呢?
...全文
1327 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZERG1111 2011-04-18
  • 打赏
  • 举报
回复
zyx89513
非常感谢
zyx89513 2011-03-14
  • 打赏
  • 举报
回复
我是这样解决的:(VC++6.0)
"Project"->"setting"->"点击c/c++"->"Category选项中选择Preprocessor"
->"在Undefined symbols:填写_DEBUG" 重新编译运行即可
abcdwell 2011-02-13
  • 打赏
  • 举报
回复
bai_hua_lin 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 abcdwell 的回复:]
引用 19 楼 bai_hua_lin 的回复:
debug下如果出现了断言错误,而且这个断言错误却不是经常出现,就应当确定为有多线程同步问题,或者引用了第三方库。楼主应该在断言失败时,选择重试,使得程序执行流程回到断言失败处,查看一些变量和堆栈信息。
debug下的问题不解决,release的风险是很大的。

有道理,的确有线程使用,
[/Quote]

把一些重要变量的值保存到文件中,出问题时,通过文件分析这些变量。对于一些被几个地方修改的变量,考虑一些同步问题,设置一些同步互斥访问的机制。
手机写程序 2011-02-11
  • 打赏
  • 举报
回复
用call stack窗口看看。
用户 昵称 2011-02-11
  • 打赏
  • 举报
回复
什么.cpp 有错的那种,都是在vc安装目录下的。
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 bai_hua_lin 的回复:]
debug下如果出现了断言错误,而且这个断言错误却不是经常出现,就应当确定为有多线程同步问题,或者引用了第三方库。楼主应该在断言失败时,选择重试,使得程序执行流程回到断言失败处,查看一些变量和堆栈信息。
debug下的问题不解决,release的风险是很大的。
[/Quote]
有道理,的确有线程使用,
Eleven 2011-02-11
  • 打赏
  • 举报
回复
先Debug调试吧,先定位错误的函数调用的地方
bai_hua_lin 2011-02-11
  • 打赏
  • 举报
回复
debug下如果出现了断言错误,而且这个断言错误却不是经常出现,就应当确定为有多线程同步问题,或者引用了第三方库。楼主应该在断言失败时,选择重试,使得程序执行流程回到断言失败处,查看一些变量和堆栈信息。
debug下的问题不解决,release的风险是很大的。
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jennyvenus 的回复:]
强制release早晚也会有问题,都已经提示出XX行有问题了,还不赶快解决。
[/Quote]
呵呵,谢谢提醒,

他提示的是什么wincore.cpp中xxx行有错误,
说实话,还真不知道该如何解决,
手机写程序 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 abcdwell 的回复:]
在release模式下,Use Multi-Byte Character Set时则不会出现错误,可以正常编译成功,
生成.exe文件,
是不是这样就可以避免出现Debug Assertion Failed异常了呢?
[/Quote]
是的,Debug Assertion Failed异常是由ASSERT()等宏引起的,debug下用来方便调试,排除bug,release下不起作用。
虽然不出现Debug Assertion Failed异常了,但可能出现更大的问题。比如ASSERT判断一个指针是否为空,空就不执行了,抛出异常,但release下可能要访问这个空指针了,会导致内存访问违例,就是崩掉了。
用户 昵称 2011-02-11
  • 打赏
  • 举报
回复
强制release早晚也会有问题,都已经提示出XX行有问题了,还不赶快解决。
手机写程序 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 abcdwell 的回复:]
引用 10 楼 eyey1 的回复:
工程属性比较下debug和release有用到unicode了吗?另一个没有用。

没错,的确是这样,
在release模式下:
Use Unicode Character Set时就会出现如我8楼所示错误,
Use Multi-Byte Character Set时则不会出现错误。
[/Quote]
release改成Use Multi-Byte Character Set。
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
在release模式下,Use Multi-Byte Character Set时则不会出现错误,可以正常编译成功,
生成.exe文件,
是不是这样就可以避免出现Debug Assertion Failed异常了呢?
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 eyey1 的回复:]
工程属性比较下debug和release有用到unicode了吗?另一个没有用。
[/Quote]
没错,的确是这样,
在release模式下:
Use Unicode Character Set时就会出现如我8楼所示错误,
Use Multi-Byte Character Set时则不会出现错误。
dukong123 2011-02-11
  • 打赏
  • 举报
回复
仔细查看。。。。。。。。。。
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jennyvenus 的回复:]
debug都有问题,就不用release了
[/Quote]
debug编译链接都没有问题,可以正常生成exe,但是,运行时偶尔会出现异常,

用release编译时会出现如7楼所示的错误,
手机写程序 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 abcdwell 的回复:]
应该算是编译错误吧。。。

C/C++ code

1>Compiling...
..........
xxx.h(43) : error C2440: 'default argument' : cannot convert from 'const wchar_t [5]' to 'const char *'
1> Types pointed to are unrela……
[/Quote]
工程属性比较下debug和release有用到unicode了吗?另一个没有用。
用户 昵称 2011-02-11
  • 打赏
  • 举报
回复
debug都有问题,就不用release了
abcdwell 2011-02-11
  • 打赏
  • 举报
回复
应该算是编译错误吧。。。

1>Compiling...
..........
xxx.h(43) : error C2440: 'default argument' : cannot convert from 'const wchar_t [5]' to 'const char *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
.............
: error C2440: 'initializing' : cannot convert from 'const char [3]' to 'ATL::CStringT<BaseType,StringTraits>'
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1> Constructor for class 'ATL::CStringT<BaseType,StringTraits>' is declared 'explicit'
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
..............

都是这种错误,
加载更多回复(14)

16,514

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧