使用gprof调试Qt程序的方法

从零搭建RK3588 Qt5.12.10开发环境:宿主机交叉编译+集成硬解码MPP实战 本文详细指导如何在RK3588平台上从零搭建Qt5.12.10开发环境,涵盖宿主机交叉编译和集成硬解码MPP库的全流程。通过配置工具链、编译Qt源码、集成MPP库及实战构建硬件加速播放器,帮助开发者高效实现嵌入式音视频应用开发,特别适合需要利用RK3588强大多媒体处理能力的项目。 阅读详情

本篇日志为原创,当然方法参考了各种网络上的文章

方法

(1)在Qt程序的pro文件中加入如下三行

QMAKE_CFLAGS+=-pg
QMAKE_CXXFLAGS += -pg
QMAKE_LFLAGS += -pg

(2)点Qt左下角的小锤子,编译,然后运行


(3)运行后,在程序目录会生成gmon.out文件,使用命令

$gprof -b -A -p -q t gmon.out>pg

来解析这个文件到pg文件

其中,t是应用程序文件名

上述命令可以用不带参数的形式,为

$gprof t gmon.out>pg


(4)pg文件的说明

Flat profile:


Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
100.81      2.36     2.36        1     2.36     2.36  CMisaka::circulation(int)
  0.00      2.36     0.00        1     0.00     0.00  _GLOBAL__sub_I__ZN7CMisaka11circulationEi
  0.00      2.36     0.00        1     0.00     0.00  __static_initialization_and_destruction_0(int, int)
  0.00      2.36     0.00        1     0.00     0.00  CMisaka::get_age()
  0.00      2.36     0.00        1     0.00     0.00  CMisaka::set_age(int)
  0.00      2.36     0.00        1     0.00     0.00  CMisaka::get_bango()
  0.00      2.36     0.00        1     0.00     0.00  CMisaka::set_bango(int)


其中


% time:各个函数占用的时间比率(不包括子函数),这一列加起来应该为100%
cumulative seconds:累积时间,当前行减去上一行即为当前函数耗费时间
self seconds:当前函数耗费时间(不包括子函数)
self calls:调用次数
ms/call:调用一次耗费的平均时间(不包括子函数),单位毫秒
total ms/call:同上,但包括子函数
name:函数名

参考文章:

http://blog.sina.com.cn/s/blog_6608391701013phr.html 

http://blog.chinaunix.net/uid-9950859-id-99112.html   代码分析工具--gcov, gprof 

http://richelbilderbeek.nl/CppQtGprofExample1.htm  Qt Creator gprof example 1: profiling a simple console application
http://hi.baidu.com/good_dream/item/a41769133bec56eb9813d6db QT + Gprof 程序性能分析
http://www.myvoipapp.com/blogs/yxh/2012/02/24/qt%E7%A8%8B%E5%BA%8F%E4%B8%8Egprof/ QT程序与gprof


C++职业规划:Qt框架学习与主流就业市场需求分析 C++作为高性能系统编程的核心语言,其技术选型与职业路径规划是开发者面临的关键决策。从语言特性与标准库(STL)的原理出发,现代C++通过RAII、智能指针、lambda表达式等机制实现了资源安全与高效抽象,其技术价值在于构建高性能、低延迟的后端服务与系统软件。在应用场景上,互联网后端开发、游戏引擎、基础架构等领域更侧重于网络编程、并发模型与算法优化,而跨平台GUI开发则需专门的框架支持。本文聚焦Qt框架,分析其在工业控制、嵌入式GUI等领域的优势,并对比主流C++岗位(如后端开发、系统编程)的核心技能需求 阅读详情

相关推荐

C++(Qt)软件调试---qmake编译优化和生成调试信息(9)

通过查看Qt编译生成的Makefile文件可以学习到Qt内部对不同编译模式做了哪些工作; Qt默认的三种编译模式基本可以适用于大部分开发调试的场景; 当我们遇见特殊的问题时就需要手动修改编译器选项,在程序编译时选择合适的优化参数和生成调试信息参数,在运行性能、程序大小、调试方便三个方向进行权衡利弊。 例如在不需要考虑性能时可以完全关闭优化,生成尽可能多的调试信息,以方便调试; 而有些程序运行需要一定的性能,就可以选择开启一定较低级别的优化。

mahuifa的博客 4955

qmake以及makefile总结

qmake以及makefile总结

jacke121的专栏 5392

使用qtCreator 编写proe插件

详情看博客

Qt Creator release版本进行调试

一、背景: 我们在进行性Qt Creator 进行开发时,想要调试代码,通常是只需要编译 debug 版本的程序。但对于很多大型项目,引用外部第三方库中难免只存在release版本的动态库,所以,当我们的程序进行debug 调试时,往往会编译不过,导致无法调试。所以,如果我们的代码编译release版本的程序,也可以进行debug 调试就好了。 二、 Qt 全局设置 1. 进入Qt 的安装目录,打开编译器目录中的 msvc-desktop.conf 文件进行配置 2. 设置属性 将 QMAKE

漫步繁华街的专栏 2万+

CQtDeployer:此项目用于部署使用QML,qt或其他С++框架编写的应用程序

CQtDeployer 支持项目 如果您喜欢我们的工作,并且对您有所帮助,则可以官方页面上支持该项目。 什么是CQtDeployer CQtDeployer是用于提取所有依赖的可执行文件库并为您的应用程序创建启动脚本的应用程序。 该程序的主要区别: 性能:该程序将应用程序部署速度提高了几倍(最多10秒) 灵活性:此应用程序具有标志,可帮助您根据您或项目的需要配置部署 Crossdeploy:此应用程序支持Windows和Linux发行版,这意味着您不仅可以使用它为平台部署项目,还可以在Linux上为Windows部署项目,反之亦然。 快速创建安装程序:部署完成后,您将收到发行版的独立安装程序。 支持平台: 支持处理器架构: x86 x86-64 臂 的ARM64 如何使用 示例:cqtdeployer <-bin [params]> [options] 查看所有选项的列表 示例:cqtdeployer -bin myApp -qmlDir〜/ MyAppProject / qml -qmake〜/ Qt / 5.12.4 / gcc_64 / bin / qmake清

python爬取巨潮资讯网所有股票年报数据

爬虫获取巨潮资讯网数据

qq_42752524的博客 6117

QT5 编译makefile 如何添加编译选项

本人下载 优客助手源码 进行学习,在QT软件中编译时,显示找不到glib.h文件,经查询资料得知, 在编译时需要添加编译选项 `pkg-config --cflags --libs glib-2.0` 方法如下, 1、打开XXX.pro,文件,在文件中添加 QMAKE_CFLAGS = `pkg-config --cflags --libs glib-2.0` QMAKE_CX

libinbin_1014的专栏 7000

从ADC校准到精准测量:避开PY32F030小信号采样的那些坑

本文深入探讨了PY32F030微控制器进行ADC小信号采样时面临的挑战与解决方案。从硬件设计、软件滤波算法到系统级校准策略,详细分析了如何避开常见陷阱,实现精准测量,特别是在25mV以下小信号场景中的应用实践。

ujm567890的博客 759

QT编译C文件代码

QMAKE_CFLAGS += -x c

loglingyy的博客 358

3-RRR并联机器人结构详解:从运动学到奇异点分析(附MATLAB仿真代码)

本文详细解析了3-RRR并联机器人的结构设计、运动学建模及奇异点分析,并提供了MATLAB仿真代码。通过对称性设计和可分析性,3-RRR结构成为教学与研究的理想对象。文章从基础杆件参数设置到奇异位形的实时捕捉,深入探讨了机构运动的数学本质,并分享了仿真调试中的实用技巧,助力工业自动化和精密控制应用。

sunny的博客 368

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 808

高效调试之道:Qt Creator与GDB在嵌入式开发中的实战应用

本文深入探讨了Qt Creator与GDB在嵌入式开发中的高效调试方法,涵盖环境搭建、远程调试、多线程与内存调试等实战技巧。通过详细配置步骤和案例演示,帮助开发者快速掌握Linux环境下上位机开发的关键技术,提升嵌入式系统调试效率。

p8q9r0的博客 292

Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录

Nvidia Jetson平台GStreamer in JP4.2.1不能采集但是 v4l2-ctl和 ffmpeg能正常采集视频。

jzwjzw19900922的博客 2124

不只是安装!用MinGW 32位编译器为你的QT项目开启FFmpeg开发之旅(Windows环境)

本文详细介绍了如何在Windows环境下使用MinGW 32位编译器为QT项目配置FFmpeg开发环境。从编译器选择、环境部署到QT Creator深度集成,提供实战技巧和常见问题解决方案,帮助开发者高效实现音视频处理功能开发。

weixin_33743248的博客 327

LLC谐振变换器软启动,不只是“慢启动”,还是“智能启动”

LLC谐振变换器的软启动,不只是“慢慢来”,而是要在控制时序、限流、响应速度之间精妙权衡。而数字控制,特别是用查表法或混合信号法,为实现真正的“最佳轨迹”提供了可能。✨小Tips:如果你的系统成本敏感,选择查表法准没错;如果你的设计目标是超高速响应,那就上混合信号的高配方案!

weixin_43199439的博客 691

YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv9的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 2603

gprof注意事项

原文 http://blog.youkuaiyun.com/stanjiang2010/article/details/5655143 作者: 注意事项: 在编译和链接时都要加上-pg选项

anzhuangguai的专栏 874

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

应用程序调用一个已为另一线程整理的接口_如何实施一个合格的软件工程

我们身边真是太多的软件了。 ————9102年的喵星人这里不是以一个老工程师的角度来奉劝如何实施一款可以千经百战的软件项目,而是以一个入行两三年的技术小白收集整理的资料以飨读者。好的,正式开始。零 没有明确的需求都是虾扯蛋没有做不完的项目,只有写不完的代码。该有的需求文档一定要有,最好能够让所有人都知道,都重视起来;一 除了编码还有很多准备工作了解项目的前世今生,多口头交流,可以是继续探寻需求的本...

weixin_39636857的博客 1172

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

nsynote编程知识库:从基础到高级的开发指南

编程知识库是开发者学习与实践的重要资源,通过系统化的知识组织帮助掌握核心技术原理。nsynote作为综合性技术文档集合,覆盖了C/C++语法、Git工作流、构建系统等核心开发技能,特别适合需要提升工程能力的开发者。知识库采用分层架构设计,每个技术点都包含原理说明、应用场景和命令行示例,这种结构化呈现方式能有效解决实际开发中的调试、性能优化等问题。其中关于GCC工具链使用和CMake最佳实践的详细记录,为构建跨平台项目提供了可靠参考。这类技术文档的价值在于将碎片化知识系统化,帮助开发者建立完整的工具链认知体系

weixin_34372728的博客 339

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

程序性能分析:工具与策略

本文将介绍程序性能分析的策略以及一系列性能分析和内存检查工具。

极地星辰 617

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

NS-3网络模拟器Ubuntu环境配置与优化指南

网络模拟器是研究和开发网络协议的重要工具,其中NS-3凭借其离散事件调度和模块化设计成为行业标准。在Linux环境下,特别是Ubuntu系统,NS-3能够充分发挥性能优势,实现纳秒级精确模拟。通过APT包管理系统和镜像源优化,可以高效解决依赖问题并提升安装速度。本文详细解析了NS-3在Ubuntu上的环境准备、依赖管理、源码编译和性能优化技巧,特别适用于5G和物联网场景的网络仿真需求。

weixin_34006468的博客 632

嵌入式Qt开发实战:智能体式开发与生产级落地指南

在嵌入式系统开发中,构建稳定可靠的图形用户界面(GUI)是核心挑战之一。Qt框架凭借其跨平台特性、丰富的组件库和高效的信号槽机制,成为嵌入式GUI开发的主流选择。其技术价值在于能够显著降低移植成本,并提供从UI设计到硬件交互的完整解决方案,广泛应用于工业控制、车载信息娱乐和医疗设备等领域。随着开发流程的演进,智能体式开发(Agentic Development)理念强调通过自动化与智能化的代理来优化开发流程,例如利用构建Agent实现一键交叉编译与部署,或通过UI适配Agent自动处理不同屏幕尺寸的布局问题

weixin_33978044的博客 468

mGBA模拟器深度实战:从编译构建到高级调试的完整指南

mGBA作为目前最先进的Game Boy Advance模拟器,以其卓越的准确性和性能表现赢得了全球开发者和游戏爱好者的青睐。本文将深入探讨mGBA模拟器的核心功能、编译构建技巧以及高级调试方法,帮助技术用户和开发者充分利用这一强大的开源工具。 ## 一、mGBA模拟器架构解析与技术优势 mGBA不仅仅是一个简单的游戏模拟器,它是一个完整的硬件仿真平台。其核心设计理念是"更快、更准确",这一目

gitblog_00150的博客 450

C++就业指南:为何优先夯实基础而非专攻Qt框架

C++作为高性能系统编程的核心语言,其技术栈选择直接影响职业发展路径。从编程语言原理层面看,C++的核心价值在于对内存管理、并发模型和系统资源的精细控制,这构成了高性能后端服务、游戏引擎和基础设施软件的基石。在工程实践中,开发者需掌握数据结构与算法、网络编程、多线程及性能优化等通用能力,这些技能具有高迁移性,是进入互联网大厂和金融科技等主流高薪领域的通行证。相比之下,Qt框架虽在嵌入式GUI和工业软件领域应用广泛,但其技术特异性较强,技能迁移性相对有限。对于以“C++面试”和“就业竞争力”为目标的开发者,将

weixin_30730053的博客 313
上一篇: 解决Qt中,只有鼠标左键处于单击状态时才会捕捉mouseMoveEvent的问题
下一篇: 使用wcscat_s函数时遇到的一些问题
相羽六
博客等级 码龄15年 5粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值