我做了一个应用程序,编译为Debug版本后,运行程序,关闭也正常结束。但我将它编译为Release版本后,运行程序还很正常,但关闭程序就出错,弹出如下的对话框 错误签名
AppName: mairay.exe AppVer:1.0.0.1 ModName: mfc42.dll
ModVer:6.2.4131.0 Offset: 00001ad4真是莫名其妙,有哪位高手碰到过类似问题或了解这方面的问题帮忙解决一下,先谢了。
AppName: mairay.exe AppVer:1.0.0.1 ModName: mfc42.dll
ModVer:6.2.4131.0 Offset: 00001ad4真是莫名其妙,有哪位高手碰到过类似问题或了解这方面的问题帮忙解决一下,先谢了。
DEBUG下会有一些安全机制,自动帮你完善。Release下不会有这种安全机制,所以容易出问题。检查一下析购函数之类的代码,是否严谨。
拿工具windbg运行一下,看看是在哪出的错。
或者,
在代码中打印日志看一下在哪出的错也行。
Release下很多问题都暴露出来了
在DEBUG下运行,要注意查看编译器的输出,如果没有设置异常引发时stop alawys,(可以在调试状态下,到菜单debug->exceptions中设置EXCEPTION的中断),一般的异常都通过这里输出了。补充完退出的代码后,如果还是引发异常,建议还是生成pdb文件(工程设置中,生成调试符号),使用windbg运行一下吧,windbg是显示当时的线程、堆栈、寄存器等完整的现场信息。
#define safedel(p) {if(p!=NULL){ delete p;p=NULL;}}之类的
怎么搞这么复杂呢?release中用debug的dll。到微软网站下载一个windbg,在windbg里运行你的EXE 或 先运行你的EXE再用windbg附加到该进程,g一下,然后进行出异常的操作,windbg会显示详细的现场信息,你的程序应该不复杂,十有八九可以找到直接出错点,再根据出错点的逻辑判断大致问题在哪。
看看有没有进行异常处理。
然后在新project中逐个加入那些文件及代码,一个个的加,看看到底哪里出问题。一般半个小时内就能定位问题的。
即使再大的项目,也不是一口气写完的,总归是一步一步来的,不可能全写完了才编译一次的吧。
如果出现debug和release执行结果有问题的话
一般可以针对指针和变量的“初始化”以及“释放”做一些查找