VC/MFC熟手请进:Debug版本EXE文件正常运行,而Release版本则出错出错!该怎么解决
VC/MFC熟手请进:Debug版本EXE文件正常运行,而Release版本则出错出错!
生成EXE文件,Release版本下产生的非法读内存的错误,在Debug版本中不出现,而且按照相同的参数步骤在调试中也不能重现?各位高人,知道原因的能点拨一下吗?
------解决方案--------------------
有没有用ASSERT这个宏来干一些事?
------解决方案--------------------
因为运行速度不同,某些共享资源可能产生冲突了。
------解决方案--------------------
建议你分别在Debug和Release下Rebuild一下
------解决方案--------------------
我的办法是加MessageBox确定错误位置,用共享锁之类同步措施解决。但也有可能是别的原因,那就依情况而定办法了。
------解决方案--------------------
我也遇到过这种问题,大多和内存的越界或非法访问有关,如果运气不好的话比较难以解决。有一次问题是这样出现的,自定义消息响应函数时,指定返回值为void,在debug模式下不出现错误,具体原因记不清了,大概是加了一些保护机制,但在release模式下就会出现内存错误。在程序中多加一些断点吧,逐渐缩小范围,应该还是可以找到的。
------解决方案--------------------
这个搞起来比较不容易
借助工具吧,BOUNDERCHECK,WINDBG,SOFTICE 这些,找起来比较快
------解决方案--------------------
在项目设置中将Release版的link项下的Enable profiling和Generate mapfile对勾挑上,然后根据mapinfo和非法读内存的地址找到出错所在行。
具体方法因包含一些图片讲解,没法直接贴上。你可以在****或google上搜一下应该可以找到。
------解决方案--------------------
这个问题最多的原因就是没有为每一个变量初始化,先检查一下这方面的原因吧。
------解决方案--------------------
写log file吧,看看在哪儿出的问题。
------解决方案--------------------
MARK
------解决方案--------------------
那顺出错的系统DLL中, 沿着CALL STACK往上找, 看看是你的程序中的那个函数调用了系统DLL的这个函数
------解决方案--------------------
同意vincent****(vincent)
------解决方案--------------------
可能有一些代码没有用到 try ...catch ... 所以出错!
------解决方案--------------------
有没有使用一些无法移植到其他语言的代码,问题容易出在那些代码上
------解决方案--------------------
你最好规范一下你的代码~~比如一些变量需要初始化,还有尽量不要用那些比较违规的代码。比如while(Parameters!=0){//一个操作;}
生成EXE文件,Release版本下产生的非法读内存的错误,在Debug版本中不出现,而且按照相同的参数步骤在调试中也不能重现?各位高人,知道原因的能点拨一下吗?
------解决方案--------------------
有没有用ASSERT这个宏来干一些事?
------解决方案--------------------
因为运行速度不同,某些共享资源可能产生冲突了。
------解决方案--------------------
建议你分别在Debug和Release下Rebuild一下
------解决方案--------------------
我的办法是加MessageBox确定错误位置,用共享锁之类同步措施解决。但也有可能是别的原因,那就依情况而定办法了。
------解决方案--------------------
我也遇到过这种问题,大多和内存的越界或非法访问有关,如果运气不好的话比较难以解决。有一次问题是这样出现的,自定义消息响应函数时,指定返回值为void,在debug模式下不出现错误,具体原因记不清了,大概是加了一些保护机制,但在release模式下就会出现内存错误。在程序中多加一些断点吧,逐渐缩小范围,应该还是可以找到的。
------解决方案--------------------
这个搞起来比较不容易
借助工具吧,BOUNDERCHECK,WINDBG,SOFTICE 这些,找起来比较快
------解决方案--------------------
在项目设置中将Release版的link项下的Enable profiling和Generate mapfile对勾挑上,然后根据mapinfo和非法读内存的地址找到出错所在行。
具体方法因包含一些图片讲解,没法直接贴上。你可以在****或google上搜一下应该可以找到。
------解决方案--------------------
这个问题最多的原因就是没有为每一个变量初始化,先检查一下这方面的原因吧。
------解决方案--------------------
写log file吧,看看在哪儿出的问题。
------解决方案--------------------
MARK
------解决方案--------------------
那顺出错的系统DLL中, 沿着CALL STACK往上找, 看看是你的程序中的那个函数调用了系统DLL的这个函数
------解决方案--------------------
同意vincent****(vincent)
------解决方案--------------------
可能有一些代码没有用到 try ...catch ... 所以出错!
------解决方案--------------------
有没有使用一些无法移植到其他语言的代码,问题容易出在那些代码上
------解决方案--------------------
你最好规范一下你的代码~~比如一些变量需要初始化,还有尽量不要用那些比较违规的代码。比如while(Parameters!=0){//一个操作;}