当前位置: 首页 > news >正文

万维网网站注册网站开发seo

万维网网站注册,网站开发seo,wordpress淘点金,花店网站建设目的C(Qt)软件调试—内存分析工具Heob#xff08;26#xff09; 文章目录 C(Qt)软件调试---内存分析工具Heob#xff08;26#xff09;[toc]1、概述#x1f41c;2、环境配置#x1fab2;3、功能说明4、使用Heob分析qt 程序内存泄漏#x1f9a7;5、使用Heob检测qt 程序野指针…C(Qt)软件调试—内存分析工具Heob26 文章目录 C(Qt)软件调试---内存分析工具Heob26[toc]1、概述2、环境配置3、功能说明4、使用Heob分析qt 程序内存泄漏5、使用Heob检测qt 程序野指针/内存越界6、使用Heob检测qt 程序空指针/throw抛出异常7、使用Heob检测qt 程序重复释放8、使用Heob检测qt 程序长生命周期式内存泄漏9、相关地址 更多精彩内容内容导航 C软件调试 1、概述 绝大部分的文章都说Heob是一个内存泄漏分析工具其实Heob只是内存泄漏分析功能比较突出实际上Heob可以分析很多内存问题。 Heob是一个Windows下检测缓冲区溢出野指针、空指针、内存越界、重复释放、异常捕获等和内存泄漏的工具集成到Qt Creator中功能强大简单容易上手。 支持MSVC和MinGW编译器编译的程序内存泄漏检测 支持32位和64位程序 不支持Linux 支持设置过滤内存泄漏字节大小 支持异常处理 支持与Qt调试器、事后调试器联动 支持将分析结果导出位xml文件后续通过加载xml文件查看分析结果 Qt Creator支持4.6以上版本低版本没有这个功能可以自行安装高版本的QtCreator注意不是Qt版本是IDE版本。 处理速度块占用资源少。 在Qt中使用Heob分析内存泄漏有4种用法 方法1 使用Heob分析MSVC编译生成的程序对于 PDB 调试信息使用 dbghelp.dll速度块 方法2 使用Heob分析MinGW编译生成的程序 对于DWARF 调试信息 gcc 需要下载dwarfstack.dll库到Heob路径下才可以使用性能会低很多 方法3 使用Heob分析MinGW编译生成的程序通过cv2pdb将DWARF 转成PDB进行分析性能和分析MSVC编译的程序差不多。方法4 命令行运行。 注意 MSVC版本2017时Heob检测会出现误报将内存泄漏包位外部错误的内存泄漏所以如果使用的编译器版本比较低过滤设置时就需要勾选上外部错误 项对MinGW和MSVC支持不同有些情况使用MSVC编译器可以检测出来使用MinGW检测不出来有些情况相反。运行Heob前需要保证代码已经完成编译并生成了可执行程序。 演示环境 环境版本系统Windows11开发环境Qt5.9、Qt5.12.12、Qt5.14.2、Qt6.8IDEQt Creator 5、Qt Creator 10、Qt Creator 14、Qt Creator 15编译器mingw730_64、mingw1310_64、MSVC2015-64、MSVC2017-64、MSVC2022-64分析工具Heob 4.0依赖库dwarfstack 2.2 2、环境配置 下载Heob 4.0和dwarfstack 2.2 解压到同一个文件夹中 打开Qt Creator选中【分析】【Heob】 打开Heob窗口后点击【浏览】选择Heob路径然后点击右下角图标保存配置。 创建一个Qt工程测试代码如下所示 #include widget.h #include ui_widget.h #include QDebug #include QMessageBoxWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-setupUi(this); }Widget::~Widget() {delete ui; }class Test { public:Test(){p new int;}private:int* p; };/*** brief 内存泄漏1*/ void Widget::on_pushButton_clicked() {Test* test new Test();free(test); }void fun() {for(int i 0; i 1024; i){int*p new int[1000];qDebug() p[1];} } /*** brief 内存泄漏2*/ void Widget::on_pushButton_2_clicked() {fun(); }/*** brief 野指针1*/ void Widget::on_pushButton_3_clicked() {int* p new int;delete p;*p 123; }/*** brief 野指针2*/ void Widget::on_pushButton_4_clicked() {int* p;*p 123; }/*** brief 空指针*/ void Widget::on_pushButton_5_clicked() {int* p nullptr;*p 123; }/*** brief 内存越界*/ void Widget::on_pushButton_6_clicked() {int*p new int[12];p[123] 123;p[12] 1234;delete[] p; }/*** brief 重复释放*/ void Widget::on_pushButton_7_clicked() {int*p new int[12];p[1] 123;delete[] p;delete[] p; }/*** brief 抛出异常*/ void Widget::on_pushButton_8_clicked() {throw 123; }/*** brief 成员数组添加数据*/ void Widget::on_pushButton_9_clicked() {for(int i 0; i 10000; i){m_list.append(new int);qDebug() i;} }QListint* g_list; /*** brief 全局数组添加数据*/ void Widget::on_pushButton_10_clicked() {for(int i 0; i 10000; i){g_list.append(new int);qDebug() i;} }/*** brief 释放内存*/ void Widget::on_pushButton_11_clicked() {for(int i 0; i m_list.count(); i){delete m_list[i];}for(int i 0; i g_list.count(); i){delete g_list[i];}m_list.clear();g_list.clear();QMessageBox::about(this, 注意, QString(已经释放内存%1 %2).arg(m_list.count()).arg(g_list.count())); } 3、功能说明 详细功能说明可以打开命令行使用heob.exe -H命令查看 如图所示 点击【新建/删除】可以创建新的配置文件 点击右下角软盘图标可以保存配置配置文件保存在C:\Users\MHF\AppData\Roaming\QtProject\QtCreator.ini文件中 点击【OK】开始进行分析。 Heob Path 下载解压的Heob.exe文件路径 XML output file: 生成的xml文件名称使用的相对路径在可执行程序路径下后续可通过【调试】窗口中的文件夹图标加载生成的xml文件 Handle exceptions 设置出现异常时的处理方式 设置为On则使用Heob处理出现异常时程序退出在调试窗口显示出现异常的信息设置为Off则在出现异常时会使用事后调试器进行调试。设置为Only则禁用所有Heob功能除了安装异常处理程序。如果应用程序崩溃则只显示崩溃的堆栈跟踪不检测内存泄漏。因此当在控制台上使用Heob或为子进程运行Heob时此选项非常有用。 Run with debugger 勾选上后会以Debug调试模式运行当出现异常例如空指针野指针时会触发断点定位到出现异常的位置 Raise breakpoint exception on error 表示出现异常时触发断点主要用于重复释放 如果没勾选则出现重复释放、内存越界等问题时不会触发异常断点会将检测结果写入文件如果勾选上后并且勾选了Run with debugger则出现重复释放、内存越界等问题时将会触发异常断点 Page protection 这个功能更适合用于检测内存越界、野指针 选择OFF时更适合检测内存泄漏选择After后会在分配的内存块末尾设置一个保护页当访问到这个保护页时就会触发异常从而识别出野指针、内存越界选择Before则会再分配的内存块前设置一个保护页这个功能会消耗内存、降低检查速度建议仅用于64位或短时间运行的程序。 Freed memory protection 这个功能会增加释放内存保护功能已经释放的内存就不会再被使用对于检测野指针、重复释放问题有用但是会大量消耗内存。Leak details 这个选项用于设置程序退出时融合处理收集到的内存泄漏数据不同的设置影响分析结果和处理速度 None表示不收集内存泄漏数据所以退出时速度最快Simple表示将所有未释放的内存写入结果文件速度最慢生成的xml文件也最大所有内存泄漏分析结果都会被记录为16 bytes in 1 blocks are lost in loss record 196 of 209 (#2513)无法通过过滤器进行过滤Detect Leak Types会记录所有确定的直接内存泄漏、间接内存泄漏到文件中速度会快一些Detect Leak Types (Show Reachable)除了记录所有确定的直接内存泄漏、间接内存泄漏到文件中还会将可能存在内存泄漏的结果记录到文件中可以通过过滤器中【可能的内存泄漏】选项过滤Fuzzy Detect Leak Types选择模糊检测泄漏类型来标记内存块或者它们是否引用了任何地址。当使用一些自定义分配器例如ffmpeg的av_malloc()时此选项很有用检测结果最少只保留最有可能内存泄漏的记录速度快生成的文件小Detect Leak Types (Show Reachable) 与Fuzzy Detect Leak Types类似不过会将其它的记录认为是可能存在的内存泄漏也会记录到文件中可以通过过滤器中【可能的内存泄漏】选项过滤。 Minimum leak size 设置记录内存泄漏的最小字节数低于设置值的内存泄漏不会被记录 Control leak recording 控制记录内存泄漏的开关、记录时间段等更加灵活的记录分析内存泄漏的功能例如记一个数组不断添加堆内存数据很长一段时间才会释放一次这种就是特殊情况的内存泄漏就可以通过n/f快捷键来控制检测 OFF关闭终端始终开启内存泄漏记录On (Start Disabled)打开终端Heob启动时不记录内存泄漏可在终端中进行控制On (Start Enabled)打开终端Heob启动时就开始记录内存泄漏并且可在终端中进行控制。 Extra arguments 用于输入运行其它Heob参数例如输入-vleaks.svg会将检测结果生成svg矢量图 更多Heob参数使用命令行Heob64.exe -H查看。 4、使用Heob分析qt 程序内存泄漏 打开测试代码使用MSVC编译器、Debug模式进行编译保留pdb符号表 编译生成可执行程序 点击【分析】【Heob】【OK】启动程序进行分析 当程序运行后分别点击【泄漏1】【泄漏2】按键然后退出程序程序退出后会将分析结果生成位leaks.xml文件并在调试窗口显示检测到的内存泄漏 生成的检测结果会有许多动态库中的误报可以点击调试窗口上的过滤图标取消勾选【外部错误】项如果MSVC版本2017则勾选外部错误 检测结果如下所示出现两个内存泄漏大小分别是409600字节和16字节。 5、使用Heob检测qt 程序野指针/内存越界 打开Heob窗口将Page protection选为【After】或者【Before 】点击开始检测运行野指针代码就可以成功捕获到野指针异常。由于野指针、内存越界都是不可恢复的异常所以检测到这类异常后会直接终止Heob。 6、使用Heob检测qt 程序空指针/throw抛出异常 打开Heob窗口使用默认设置点击开始检测运行野指针代码就可以成功捕获到空指针、抛出异常。由于空指针异常无法恢复检测到后会终止Heob如果throw抛出异常后没有被try捕获则会被Heob检测到并触发终止如果被try捕获则Heob无法检测。 7、使用Heob检测qt 程序重复释放 打开Heob窗口勾选Raise breakpoint exception on error 表示出现异常时触发断点如果不勾选就只会保存到检测结果再勾选Run with debugger 在出现重复释放异常时就会触发断点进入调试。 8、使用Heob检测qt 程序长生命周期式内存泄漏 这里的长生命周期式内存泄漏不同于普通内存泄漏使用new分配了而没有delete 长生命周期内存泄漏指使用new分配了内存过了很长时间才会delete例如成员指针、全局变量、静态变量等 这类内存泄漏会更加难以排查也容易造成严重问题。 测试方法1 无法检测到长生命周期内存泄漏 打开Heob进行检测点击按键向成员数组中new大量变量过一段时间后再释放成员数组中的所有内存无法检测到出现内存泄漏 测试方法1 无法检测到长生命周期内存泄漏 打开Heob窗口 如下图所示选择Detect Leak Types不必须避免文件写入太多内存检测大小设置为500字节不必须选择On(Start Disabled)在程序启动前不记录在运行过程中通过终端命令行控制开始/结束记录的时机 点击【OK】启动Heob 程序运行后按下n键开始记录 然后在程序中分别给成员数组、全局数组分配内存 在终端按下f键停止记录并按下s键将当前内存泄漏分析结果写入文件 然后点击按键释放数组分配的内存 退出程序后就可以看见检测到的内存泄漏了。 9、相关地址 Heob下载dwarfstack.dll通过cv2pdb将DWARF 转成PDBHeob | Qt Creator DocumentationDetect memory leaks with Heob | Qt Creator Documentation
http://www.dnsts.com.cn/news/106355.html

相关文章:

  • 四川城乡建设厅官方网站网站备案icp
  • 重庆卓光网站建设网站建设冫金手指谷哥十四
  • 大连网站推广爱得科技网站公司 模板
  • cms免费企业网站wordpress图片添加音乐
  • 华为云做网站如何建设网站挣钱
  • 双语外贸网站源码贵阳市建设局网站
  • 江西昌宇建设工程公司网站福州网站制作官网
  • 延安市建设局网站网站开发建站微信公众号小程序
  • 怎样用eclipse做网站济南电子商务网站开发
  • 网站空间是不是服务器2昌平区网站建设
  • 免费网站安全闵行网站建设推广
  • dede音乐网站源码阜宁做网站哪家公司最好
  • 青岛建设公司网站费用大连网站建设资讯
  • 枣强网站建设培训学校拼多多开店流程
  • 学校的网站如何建设提高网站权重的方法
  • 百色网站建设公司建网站点击率
  • wordpress整站源码虚拟空间应用程序下载
  • 网站下载器义乌公司网站
  • 医疗器械类网站icp备案前置审批公司官网怎样制作
  • 购物网站建设价位南通通明建设监理有限公司网站
  • 广 做网站蓝光电影下载南京网络推广
  • 中小企业网站制作苏州seo关键词优化
  • 网站建设要花钱吗seo综合查询怎么用的
  • 苍南最好的网站建设公司wordpress链接选项不见了
  • 小型电商网站模板网站在百度的图标显示不正常显示
  • 网站logo一般做多大wordpress如何修改首页模板文件
  • 网站建设目标是什么意思网站后台管理系统怎么做
  • 定制网站与模板网站的主要区别网络营销外包专家
  • 中国制造网外贸平台下载北京移动端网站优化
  • 长春公司做网站贵阳做网站优化