【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未来工程师”原创发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】带你玩转Visual Studio——03.带你了解VC++各种类型的工程

上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一个工程时会有很多的工程类型(图1),现在将简单介绍各种类型工程的含义和主要用途。由于这里包含的工程类型太多,有很多本人也没有接触过,有些可能理解的不太对的地方还请…

如何调整金格电子章服务器印章_重磅!公安部再度认可电子签名、电子印章法律效力!...

近日,公安部发布《关于修改〈公安机关办理刑事案件程序规定〉的决定》,对《公安机关办理刑事案件程序规定》(以下简称规定)进行了全面修改完善,并将于9月1日起施行。修改后的规定共14章388条。其中,新增的第…

【转】带你玩转Visual Studio——04.带你高效开发

上一篇文章带你玩转Visual Studio——带你了解VC各种类型的工程一文中讲了各种类型VC工程的主要功能和用途。现在将带你一起快速开发c程序。 有过Java开发经验的人都知道Java的常用开发工具(如Eclipse、Intellij IDEA等)都有非常强大的关键字高亮、智能提示、快速追踪等的功能…

【信号与线性系统】知识点与学习攻略

知识点理解 关于正交分解可以看这个视频: https://www.bilibili.com/video/BV1qV411C7u6/ 记住两个完备正交函数集: 一个是正余弦三角函数,非零不同频率项乘积为0,非零同频率项乘积积分为T/2,零频率项乘积积分为T。 一…

2020-12-19

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画…

微软模拟飞行10厦门航空涂装_《微软飞行模拟器》多人游戏模式演示:可组队飞行...

IT之家3月29日消息 《微软飞行模拟器》(Flight Simulator)是2020年最受期待的游戏之一,开发商Asobo Studio现在分享了一段新的视频,详细介绍了《微软飞行模拟器》的多人游戏模式。《微软飞行模拟器》游戏的主模式将看到所有玩家在同一个世界中一起玩。微…

【转】UDP协议格式以及在java中的使用

UDP协议格式以及在java中的使用 UDP是面向无连接的通讯协议,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。 UDP适用于…

python网页填表教程_PythonSpot 中文系列教程 · 翻译完成

原文:PythonSpot Python Tutorials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。在线阅读ApacheCN 学习资源目录PythonSpot 中文系列教程初学者 介绍Python 字符串字符串&#xff0…

【转】TCP/IP协议到底在讲什么?【乐搏TestPro】

用比喻和漫画给有需要的小伙伴解释下IP、TCP捎带题一下各种协议与HTTP协议的关系; 目录: 负责传输的IP协议 确保可靠性的TCP协议 各种协议与HTTP协议的关系 一、负责传输的IP协议 按照层次分,IP(全称:Internet Prot…

Qt中标绘功能的实现方法对比

使用Qt开发桌面程序,经常会有标绘的需求,一般有以下几点: 新建:圆、矩形、椭圆、文字标注,插入图像等;编辑:指对已标绘内容的属性编辑修改功能;删除:指对已标绘内容的删…

【转】PE文件结构详解--(完整版)

(一)基本概念 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,P…

【转】逆变与协变详解

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画…

【转】GitHub 从单机到联机:玩转 Pull Request

最近在参与一个叫 Exercism 的项目,这是一个由 GitHub 生态工程师 Katrina Owen 发起的编程练习社区,提供了超过50门语言的练习。作为用户,你仅需使用命令行工具即可下载和提交练习,提交后还可以和社区中其他学习者交流讨论。 Exe…

【转】GitHub客户端操作1--仓库相关操作github团队协作流程

1、创建仓库 点击“”,点击Create,然后填写Name为my,点击Create repository,即可创建一个my仓库 2、从本地仓库存放位置,添加test仓库到GitHub客户端 点击“”,点击Add,然后点击Browse,选择仓库存放位置&a…

【转】GitHub客户端操作2--分支操作

简单分支操作 (1)创建新分支:my分支 备注:新创建的分支:my分支里面的内容是和master分支里面的内容是完全一样的。 (2)删除my分支 (3)修改my分支【在my分支上进行项目内…

【转】GitHub客户端操作3--pull Request(拉请求)

一、参考说明 参考文章一:Github上提交代码(pullrequest) 网址: https://jingyan.baidu.com/article/358570f64dcdc2ce4724fc32.html 参考文章二:GitHub——Pull Request 网址:http://blog.csdn.net/u012325167/article/detai…

【转】GitHub上README.md教程

本文是转载文章,文章的来源:csdn博客 博主:果冻虾仁 文章: GitHub上README写法暨GFM语法解读 博文地址:https://blog.csdn.net/guodongxiaren/article/details/23690801 转载请保留原作者guodongxiaren的原文地址&…

【转】WPF单位真的与分辨率无关吗?

转载自http://www.cnblogs.com/helloj2ee/archive/2009/04/21/1440709.htm WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都能很好地显示。…

【转】世上最简单的vue教程

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境…

工程师学乐理(一)尝试理解音乐

前言 很早就接触了乐理,但是一直没有学懂,越学问题越多。个人感觉,其中很大的原因是有关教材写得看不懂,用未知的东西描述未知的东西,不知所云。前几年还买了一把吉他,买了课程,断断续续学了几…