左下方的小电脑图标,将debug改成release,重新组建,再去工程目录下的release文件夹下就可以看到exe文件了。
如果是想要打包发布程序,使得程序可以在其他电脑上运行还需要拷贝动态运行库的。
需要将待发布的release版的exe文件和dll文件放到一个文件夹下
具题需要以下的dll文件:
可以去你的Qt安装目录下复制,我这里是:D:QtQt51111mingw48_32in
platforms文件夹下面包含:qminimaldll和qwindowsdll
所在的文件夹是:D:QtQt51111mingw48_32pluginsplatforms
1 变量。
大家都知道,debug跟release在初始化变量时所做的 *** 作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近
似于随机(我想是直接从内存中分配的,没有初始化过)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将
导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简
单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到,如debug方式下数组越界也大多不会出错,在
release中就暴露出来了,这个找起来就比较难了:( 还是自己多加注意吧
2 自定义消息的消息参数。
MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。这也存在debug跟release的问题吗?答案是肯定的。在自定义消息
的函数体声明时,时常会看到这样的写法:afx_msg LRESULT OnMessageOwn();
Debug情况下一般不会有任何问题,而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。导致这个错误直接原因是消
息体的参数没有添加,即应该写成:afx_msg LRESULT OnMessageOwn(WPARAM wparam,
LPARAM lparam); (注2)
3 release模式下不出错,但debug模式下报错。
这种情况下大多也是因为代码书写不正确引起的,查看MFC的源码,可以发现好多ASSERT的语句(断言),这个宏只是在debug模式下才有效,那么就
清楚了,release版不报错是忽略了错误而不是没有错误,这可能存在很大的隐患,因为是Debug模式下,比较方便调试,好好的检查自己的代码,再此
就不多说了。
4 ASSERT, VERIFY, TRACE调试宏
这种情况很容易解释。举个例子:请在VC下输入ASSERT然后选中按F12跳到宏定义的地方,这里你就能够发现Debug中ASSERT要执行
AfxAssertFailedLine,而Release下的宏定义却为"#define ASSERT(f)
((void)0)"。所以注意在这些调试宏的语句不要用程序相关变量如i++写 *** 作的语句。VERIFY是个例外,"#define
VERIFY(f) ((void)(f))",即执行,这里的作用就不多追究了,有兴趣可自己研究:)。
总结:
Debug与Release不同的问题在刚开始编写代码时会经常发生,99%是因为你的代码书写错误而导致的,所以不要动不动就说系统问题或编译器问题,
努力找找自己的原因才是根本。我从前就常常遇到这情况,经历过一次次的教训后我就开始注意了,现在我所写过的代码我已经好久没遇到这种问题了。下面是几个
避免的方面,即使没有这种问题也应注意一下:
1 注意变量的初始化,尤其是指针变量,数组变量的初始化(很大的情况下另作考虑了)。
2 自定义消息及其他声明的标准写法
3 使用调试宏时使用后最好注释掉
4 尽量使用try - catch()
5 尽量使用模块,不但表达清楚而且方便调试。
vc右上角菜单栏或工具栏的空白处右键,选上Build项,使build工具栏可见,在Build工具栏上就可以选择工程的Debug或Release版本。
或者菜单栏Build->BatchBuild,在d出的对话框中选择编译哪个版本,或者两个版本都编译。
Debug版本就是调试版本,Visual C++
60默认的就是Debug版本。在Debug版本中,可以使用单步执行、跟踪等功能,但其生成的可执行文件比较大,代码运行比较慢。Release版本就是发行版本,其运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
还有一点,Release版本的exe文件链接的目标是标准的MFC DLL(Use MFC in a shared
or static
dll)。比如MFC42DLL。这些DLL在安装windows的时候,就会装到系统中。因此,这样的exe在没有安装Visual C++
60的机器上也能运行。而Debug版本的exe链接了调试版本的MFC DLL文件,比如MFC42DLL。在没有安装Visual C++
60的机器上不能运行,因为缺少MFC42DDLL等,除非选择use static dll when link。
Debug版本中包含大量的调试信息,所以我们能够单步执行、Watch表达式等等,而release版本仅包含我们的代码。由于要利于程序的测试,Debug版本的程序附带很多测试信息和测试程序时才需要的代码,所以Debug版本的程序需要VC的Debug(注意这里不是指程序的Debug,而是指VC的调试器)才能运行。而Release版本就不具有这些特性,所以在Release版本的程序上不能做调试!打包就相当于将你制作的东西发布出去,应该是优化过的代码,当然要用发布版本,即Release版本。
两者所用的动态连接库是不一样的,Release版本所需要的dll和lib已经包含在Windows的system(或者system32)下,所以只需要拷贝就可以运行了,但是Debug版本需要的dll和lib是在安装vc时装上去的,如果你想直接将debug版本给用户,需要拷贝几个文件,但这样显得很臃肿,一般来说不可取。
首先release的汉语意思是
[英][rɪˈli:s][美][rɪ'li:s]
vt
释放; 放开; 发布; 发行;
n
释放,排放,解除; 释放令; 公映的新影片,发布的新闻[消息];
在C++里面release()是一个释放捕捉的函数,被称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。和Debug是有点类似的,不过Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
Release和Debug版本主要不同有几个:
优化(Optimizations)。你可以在工程设置中将Release版本的优化先全部去掉试试效果。
MFC库的使用方式。默认Debug版本使用静态链接模式,Release版本使用动态链接模式,这个也可以在工程设置中尝试修改看看,但一般来说这个影响不大。
代码分支。代码中有很多地方会有#ifdef _DEBUG这样或类似的语句,这样的分支会形成两种版本不同的代码,你需要认真检查源代码中这样的分支语句,分析不同代码可能产生的问题。
安全处理。Debug版本会有很多安全处理模式,并有安全预警语句,这样的语句在Release版本中是不会执行的,比如ASSERT TRACE VERIFY等,但通常只是判断性质,如果使用不当,也会造成两个版本的执行差异。
外链库的使用。外调链接库是不可控的因素,很多DLL/LIB中会根据调用者的编译模式产生不同的处理,这个是无法通过自己的代码进行控制的(除非加上_DEBUG,但这明显是不可取的),这种情况只能是进行接口测试,但无法控制。
一般来说,两种编译模式的差异,首先应该进行代码的安全优化,检查变量初始化、释放是否完善,同时检查是否有分支代码和调试代码(参考4)调用不当。这些做完之后,备份工程,通过调整Release工程配置研究具体哪个配置造成的问题,甚至可以加上_DEBUG编译条件来进行逐一测试。如果这些都没有找到问题,那么多数是外调链接库的问题了。
vc右上角菜单栏或工具栏的空白处右键,选上Build项,使build工具栏可见,在Build工具栏上就可以选择工程的Debug或Release版本。
或者菜单栏Build->Batch Build,在d出的对话框中选择编译哪个版本,或者两个版本都编译。
以上就是关于pyQt5程序如何作成release模式_pyqt5使用全部的内容,包括:pyQt5程序如何作成release模式_pyqt5使用、编译成release版本与debug版本的程序有何执行上的区别、VC6.0中怎样设置才能生成Debug或Release版本的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)