【Qt调试技巧】Profile配置使用及一些坑
介绍不知从哪个版本起,Qt Creator中的构建配置中,增加了一种新型配置,名叫“Profile”,如下图所示:官方对Profile的描述是:Profile是介于Debug和Release中间的一种配置。具体是什么意思呢?下表描述了三种配置的区别:配置类型特点Debug带调试信息,编译时不做优化。Profile带调试信息,编译时做一定优化。Release一般不带调试信息,可以根据优化选项做不同程
介绍
不知从哪个版本起,Qt Creator中的构建配置中,增加了一种新型配置,名叫“Profile”,如下图所示:
官方对Profile的描述是:Profile是介于Debug和Release中间的一种配置。具体是什么意思呢?下表描述了三种配置的区别:
配置类型 | 特点 |
---|---|
Debug | 带调试信息,编译时不做优化。 |
Profile | 带调试信息,编译时做一定优化。 |
Release | 一般不带调试信息,可以根据优化选项做不同程度的优化。 |
应用
那么应该在什么场景下使用Profile构建配置呢?有以下几种场景:
场景一
目前手头只有Release版的软件包,配置Debug版的软件包很困难,比如找不到对应Debug版本的依赖库。这种情况下,软件出现问题,想要调试软件怎么办?读过前面《掌握Qt调试技术》文章的同学应该知道,通用的方法是打印日志,如果可以调试就尽量调试。
显然Release下是无法调试的。那么,我们就可以通过在Profile配置下构建项目,Qt在qmake项目.pro文件时,会将Profile配置视作Release配置解析。使用Profile构建会生成*.pdb调试信息文件,用于代码调试。这样既解决了依赖库版本问题,又解决了Release无法调试的问题,一举两得。
场景二
开发的软件比较庞大,由于Debug版本的软件因为没有经过优化,运行效率比较低,界面启动速度慢,导致使用、调试起来很费时间。
如何解决这个问题呢?我们可以将程序构建成Profile版本。使用Profile配置构建的程序运行速度会提高,同时,在开发时也可以进行代码调试。但是缺点是链接的动态库必须要使用Release版的。
需要再次强调,在Profile配置下,qmake在解析.pro文件时,会认为当前配置为Release,且相对于Debug配置,有:
- 项目会使用Release开关中链接的Release版的动态库及配置
- 代码中的断言失效
- 其他
总的来说,Profile就是Release,但是可以调试。一定要根据需求考虑周全再使用。
Debug和Release配置的具体区别将在后面的章节讲解。
原理
Profile的原理是控制编译选项。
Profile配置等于:Release模式下,开启一般优化选项,并生成调试信息。
问题
在Qt Creator中使用Profile会出现一些问题。Profile配置下构建的程序,会经常出现:断点打不上、调试变量值错误的问题,这是因为Profile配置有一定的优化,导致某些代码、变量在生成的exe中对应不起来了。这么看来Profile确实用起来很尴尬。之前我们也说过,在Qt的调试功能确实比不上VS,问题比较多。
使用Profile配置构建程序,虽然可以获得速度上的提升,但是调试功能受到了影响,如何解决这个问题呢?答案是关闭Profile优化。
无优化的Profile
通过在VS中指定编译选项,可以实现比较好的、预期的Profile效果。将项目当前配置切换到Release下,并配置Release属性页。
首先关闭编译器优化,如下所示:
然后,配置生成调试信息,如下图:
如此一来便可以实现我们没有优化的Profile。
那么我们如何要在Qt里实现没有优化的Profile呢?在.pro文件中添加以下指令:
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Od
用于告诉编译器禁用优化,这样就可以使Profile像Debug一样调试了。
结语
最近确实比较忙,废话不多说。写此文章时稍微有些仓促,如有错误疏漏恳请大家指出。
本文由微信公众号“Qt未来工程师”原创发布。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)