C++(Qt)软件调试---Windows 性能分析器WPA(28)
C++(Qt)软件调试—Windows 性能分析器WPA(28)
文章目录
- C++(Qt)软件调试---Windows 性能分析器WPA(28)
- @[toc]
- 1 概述🐜
- 2 环境准备
- 3 程序性能分析
- 4 相关地址🐐
文章目录
- C++(Qt)软件调试---Windows 性能分析器WPA(28)
- @[toc]
- 1 概述🐜
- 2 环境准备
- 3 程序性能分析
- 4 相关地址🐐
更多精彩内容 |
---|
👉内容导航 👈 |
👉C++软件调试 👈 |
1 概述🐜
软件开发中程序性能优化、性能瓶颈排查对开发人员来说是必不可少的技能。
常见的性能优化包括CPU使用率、内存使用率、内存泄漏、文件IO等。
linux下的perf工具功能非常强大,但是可惜不支持Windows;而windows中VS也提供了类似的工具(性能探查器),windows除了vs自带的性能探查器外,还有更强大的WPA、WPR、xperf可用于性能分析。
- 可以使用xperf命令行工具或者WPR图形界面工具保存系统和应用程序事件到文件;
- 然后使用图形界面的WPA进行分析;
- WPA支持火焰图等多种图表分析;
- WPA支持随时启动记录和停止记录,不需要像其它分析工具在程序启动时运行;
- 并且WPA支持同时记录系统的和所有正在运行的进程的信息。
- 本文中只演示如何使用WPA进行CPU性能分析,还有更多强大功能没有演示。
演示环境:
环境 | 版本 |
---|---|
系统 | Windows11 |
编译器 | msvc2017/2022 由于WPA需要pdb符号表,所以如果是mingw编译器生成的程序需要使用cv2pdb工具转换。 |
2 环境准备
-
安装VS时Windows SDK中就包含了WPA分析工具;
-
或者单独下载安装进行安装;
-
可选择直接安装或者下载离线安装包;
-
安装完成后如下图所示。
3 程序性能分析
-
创建一个工程,这里我创建的是一个Qt工程;
-
添加如下所示代码:
#include "widget.h" #include "ui_widget.h" #include <vector> #include <list> using namespace std; void fun1() { vector<int> arr; for (int i = 0; i < 10000000; i++) { arr.push_back(i); } } void fun2() { list<int> arr; for (int i = 0; i < 10000000; i++) { arr.push_back(i); } } void fun3() { vector<int> arr; arr.reserve(10000000); for (int i = 0; i < 10000000; i++) { arr.push_back(i); } } Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { fun1(); fun2(); fun3(); }
-
编译启动程序后,运行WPR UI程序,如下图所示,然后点击【Start】开始记录;
-
记录完成后再次点击【Save】,如下所示保存记录信息到文件中。
-
启动WPA程序;
-
打开刚才保存的文件;
-
如下图所示,打开【Computation】【CPU Usage(Sampled)】【Utilization by COFF Group,Module, Function】;
-
打开后如下图所示,会显示所有程序的火焰图;
-
然后按快捷键【Ctrl + F】打开搜索窗口,选择【Process】,然后输入需要查找的程序名称;
-
找到需要分析的程序后,鼠标右键选择【Filter To Selection】;
-
这样就只会显示选中程序的火焰图了。
-
然后选择【Configure Symbol Paths】设置pdb符号表路径,选择【Load Symbols】加载符号表;
-
加载完成符号表后就可以如下所示查看具体函数的性能情况了。
-
可以在火焰图窗口上方直接搜索具体的函数名称;
-
或者可以打开搜索窗口,选择【Stack】查找具体的函数名称。
-
当火焰图过大时,看不清楚,可以选择行,然后鼠标右键设置【Filer To Flame】显示选中行往上的火焰图,或者设置【Undo Filer】取消。
-
注意:如果勾选了下图中的【Filter Lower Values】会对设置【Filer To Flame】的精确度有影响。
-
如果加载符号表时非常慢,可能是在联网下载符号表,可以选择关闭网络获取取消勾选下载符号表;
4 相关地址🐐
- Windows 性能工具包 | Microsoft Learn
- 下载并安装 Windows ADK | Microsoft Learn
- Windows 性能分析器 | Microsoft Learn