VS2019诊断功能
vs代码内存/CPU使用率诊断
在代码运行过程中,有时候会出现内存泄漏,内存/CPU占用过高等情况,这些情况的出现十分影响代码的运行效率和鲁棒性,所以有必要对代码进行诊断和优化处理。这边使用VS2019自带的代码诊断工具进行检测。
具体的操作方法是
-
先在要诊断的代码部分添加断点或者让程序完整运行起来(最好是能够循环)
-
运行代码(这边以绘制三角形为例子,屏幕是不断在刷新的)可以看到内存/CPU的运行状况
-
这边以CPU使用率为例子,内存的占用查看也一样。选择一段或者是整段运行过程点击CPU使用率,再点击全部中断即可查看CPU占用情况
-
CPU占用情况根据饼图可以大致看出,然后再点击外部代码,从外部代码中选出关注的函数查看代码内部所占用的具体情况,根据需要对代码进行优化等操作。
内存泄漏诊断
在堆上分配内存(new或者malloc)但是没有释放(delete或者free)会造成内存泄漏,为了避免忘记释放导致的问题我们可以对代码进行内存诊断,方法和CPU诊断类似,主要的区别是我们需要使用内存使用率这边来查看具体的情况。
这边随便写一串代码,且保证其没有释放(内存泄漏)
//Test.h
#pragma once
#include<iostream>
using namespace std;
class Test
{
public:
Test();
Test(int a, int b);
Test(const Test& t);
~Test();
void func();
int m_a, m_b, m_c[100];//需要分配408个字节
};
#include "Test.h"
Test::Test()
{
cout << "调用无参构造函数" << endl;
}
Test::Test(int a, int b)
{
m_a = a;
m_b = b;
cout << "调用构造函数" << endl;
}
Test::Test(const Test& t)
{
m_a = t.m_a;
m_b = t.m_b;
cout << "调用拷贝构造" << endl;
}
Test::~Test()
{
cout << "调用析构函数" << endl;
}
void Test::func()
{
}
//主函数
#include"Test.h"
void func()
{
//delete t;
}
void main()
{
for (int i = 0; i < 100; i++)
{
Test* t0 = new Test(1,2);//内存泄漏 100*408
}
for (int i = 0; i < 1000; i++)
{
Test* t0 = new Test();
Test* t1 = new Test();//t1内存泄漏1000*408
delete t0;//t0释放了
}
system("pause");
}
点击内存使用率-》截取快照-》分配差异值-》出现左边1100个泄露的指针,以及泄露的内存1100*408=448800
双击1100进入分配的内存地址
双击地址直接跳入内存泄露的地方,还是相当快捷的。