【Qt调试技巧】Profile配置使用及一些坑

介绍

不知从哪个版本起,Qt Creator中的构建配置中,增加了一种新型配置,名叫“Profile”,如下图所示:
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属性页。
首先关闭编译器优化,如下所示:
Release优化属性页配置
然后,配置生成调试信息,如下图:
Release调试信息生成属性页配置
如此一来便可以实现我们没有优化的Profile。

那么我们如何要在Qt里实现没有优化的Profile呢?在.pro文件中添加以下指令:

QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Od

用于告诉编译器禁用优化,这样就可以使Profile像Debug一样调试了。

结语

最近确实比较忙,废话不多说。写此文章时稍微有些仓促,如有错误疏漏恳请大家指出。

本文由微信公众号“Qt未来工程师”原创发布。

posted @ 2022-05-22 11:21  撬动未来的支点  阅读(599)  评论(0编辑  收藏  举报