01、Heob 是 what?
>>>
绝大部分的文章都说Heob是一个内存泄漏分析工具,其实Heob只是内存泄漏分析功能比较突出,实际上Heob可以分析很多内存问题。
Heob是一个Windows下检测缓冲区溢出(野指针、空指针、内存越界、重复释放、异常捕获等)和内存泄漏的工具,集成到Qt Creator中,功能强大,简单容易上手。
支持MSVC和MinGW编译器编译的程序内存泄漏检测;
支持32位和64位程序;
不支持Linux;
支持设置过滤内存泄漏字节大小;
支持异常处理;
支持与Qt调试器、事后调试器联动;
支持将分析结果导出位xml文件,后续通过加载xml文件查看分析结果;
Qt Creator支持4.6以上版本,低版本没有这个功能,可以自行安装高版本的QtCreator(注意:不是Qt版本,是IDE版本)。
处理速度块,占用资源少。
02、Qt Heob用法
>>>
方法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前需要保证代码已经完成编译并生成了可执行程序。
03、开始表演
>>>
环境 版本
系统 Windows11
开发环境 Qt5.9、Qt5.12.12、Qt5.14.2、Qt6.8
IDE Qt 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
| Heob 4.0下载 | https://github.com/ssbssa/heob |
| 依赖库下载 | https://github.com/ssbssa/dwarfstack/releases/tag/2.2 |
04、配置
>>>
打开Qt Creator,选中【分析】【Heob】;
打开
打开Heob窗口后点击【浏览】选择Heob路径,然后点击右下角图标保存配置。
报错
可能是还没编译成.exe不管了,我们下载一个现成的看看
可以了
可以了
05、测试
>>>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
class Test
{
public:
Test()
{
p = new int;
}
private:
int* p;
};
/**
* @brief 内存泄漏1
*/
void MainWindow::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 MainWindow::on_pushButton_2_clicked()
{
fun();
}
/**
* @brief 野指针1
*/
void MainWindow::on_pushButton_3_clicked()
{
int* p = new int;
delete p;
*p = 123;
}
/**
* @brief 野指针2
*/
void MainWindow::on_pushButton_4_clicked()
{
int* p;
*p = 123;
}
/**
* @brief 空指针
*/
void MainWindow::on_pushButton_5_clicked()
{
int* p = nullptr;
*p = 123;
}
/**
* @brief 内存越界
*/
void MainWindow::on_pushButton_6_clicked()
{
int*p = new int[12];
p[123] = 123;
p[12] = 1234;
delete[] p;
}
/**
* @brief 重复释放
*/
void MainWindow::on_pushButton_7_clicked()
{
int*p = new int[12];
p[1] = 123;
delete[] p;
delete[] p;
}
/**
* @brief 抛出异常
*/
void MainWindow::on_pushButton_8_clicked()
{
throw 123;
}
/**
* @brief 成员数组添加数据
*/
void MainWindow::on_pushButton_9_clicked()
{
for(int i = 0; i < 10000; i++)
{
m_list.append(new int);
qDebug() << i;
}
}
QList<int*> g_list;
/**
* @brief 全局数组添加数据
*/
void MainWindow::on_pushButton_10_clicked()
{
for(int i = 0; i < 10000; i++)
{
g_list.append(new int);
qDebug() << i;
}
}
/**
* @brief 释放内存
*/
void MainWindow::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()));
}
06、功能使用说明
>>>
$ heob64.exe -h
Usage: heob64 [OPTION]… APP [APP-OPTION]…
-oX heob output [1]
-PX show process ID and wait [0]
-cX create new console [0]
-pX page protection [1]
-fX freed memory protection [0]
-dX monitor dlls [3]
-hX handle exceptions [1]
-RX raise breakpoint exception on allocation # [0]
-rX raise breakpoint exception on error [0]
-FX show full path [0]
-lX show leak details [1]
-zX minimum leak size [0]
-kX control leak recording [0]
-LX show leak contents [0]
-H[H] show full help
heap-observer 3.1 (64bit)
`heob64.exe` 是一个用于堆内存观察的工具,通常用于调试内存泄漏和其他内存相关的问题。以下是命令行选项的详细解释:
- `-oX`:设置堆观察器的输出方式。`X` 是一个数字,表示不同的输出级别。默认值为 `1`。
- `-PX`:显示进程 ID 并等待。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-cX`:为应用程序创建一个新的控制台窗口。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-pX`:设置页面保护级别。`X` 是一个数字,表示不同的保护级别。默认值为 `1`。
- `-fX`:设置释放内存的保护级别。`X` 是一个数字,表示不同的保护级别。默认值为 `0`(禁用)。
- `-dX`:监控动态链接库(DLL)的加载和卸载。`X` 是一个数字,表示不同的监控级别。默认值为 `3`。
- `-hX`:处理异常。`X` 是一个数字,表示是否启用此功能。默认值为 `1`(启用)。
- `-RX`:在分配内存时触发断点异常。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-rX`:在发生错误时触发断点异常。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-FX`:显示完整路径。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-lX`:显示内存泄漏的详细信息。`X` 是一个数字,表示是否启用此功能。默认值为 `1`(启用)。
- `-zX`:设置最小内存泄漏大小。`X` 是一个数字,表示最小泄漏大小。默认值为 `0`。
- `-kX`:控制内存泄漏记录。`X` 是一个数字,表示不同的控制级别。默认值为 `0`(禁用)。
- `-LX`:显示内存泄漏的内容。`X` 是一个数字,表示是否启用此功能。默认值为 `0`(禁用)。
- `-H[H]`:显示完整的帮助信息。`H` 可以重复使用以显示更详细的帮助。
### 示例用法
假设你想调试一个名为 `myapp.exe` 的应用程序,并希望启用内存泄漏检测和详细输出,可以使用以下命令:
```bash
heob64.exe -o1 -l1 myapp.exe
```
这将启动 `myapp.exe` 并在程序结束时显示内存泄漏的详细信息。
### 注意事项
- 使用 `heob64.exe` 时,建议在调试环境中运行,以便更好地捕获和分析内存问题。
- 某些选项可能会影响程序的性能,因此在生产环境中使用时要谨慎。
如果你需要更详细的帮助信息,可以使用 `-HH` 选项来查看完整的帮助文档。
>>>
点击【新建/删除】可以创建新的配置文件;
点击右下角软盘图标可以保存配置,配置文件保存在QtProjectleaks.xml文件中;
点击【OK】开始进行分析。
Heob Path:下载解压的Heob.exe文件路径;
XML output file: 生成的xml文件名称,使用的相对路径,在可执行程序路径下,后续可通过【调试】窗口中的文件夹图标加载生成的xml文件;
如果想更改目录这样操作
08、Handle exceptions
>>>
开关的作用:
Handle exceptions:设置出现异常时的处理方式
1.设置为On则使用Heob处理,出现异常时程序退出,在调试窗口显示出现异常的信息;
点击OK测试
弹出界面
【黑色界面后面再说】我们测试一下按钮,记得勾选需要捕获的异常
2.设置为Off则在出现异常时,会使用事后调试器进行调试。
【点击OK】
【设置一下】在使用 Qt Creator 进行崩溃后的调试(post-mortem debugging)
点击【空指针】弹出,点击默认
弹出
关闭窗口都会生成一个文件
我们复制所有文件内容,丢给fitcode的AI分析一下。
通过GDB也可以测试这些问题
gif
3.设置为Only则禁用所有Heob功能,除了安装异常处理程序。如果应用程序崩溃,则只显示崩溃的堆栈跟踪,不检测内存泄漏。因此,当在控制台上使用Heob或为子进程运行Heob时,此选项非常有用。
略
9、Run with debugger
>>>
- Run with debugger: 勾选上后会以Debug调试模式运行,当出现异常(例如空指针野指针)时会触发断点,定位到出现异常的位置;
光标跳动位置就是问题点
10、Raise breakpoint exception on error
>>>
Raise breakpoint exception on error:表示出现异常时触发断点,(主要用于重复释放)
1.如果没勾选,则出现重复释放、内存越界等问题时,不会触发异常断点,会将检测结果写入文件;【写入文件-勾选】
【文件自己分析】
2.如果勾选上后,并且勾选了Run with debugger,则出现重复释放、内存越界等问题时,将会触发异常断点;【只用这个可以检查空指针、野指针等】
gif
11、Page protection
>>>
Page protection: 这个功能更适合用于检测内存越界、野指针;
1.选择OFF时更适合检测内存泄漏;
2.选择After后会在分配的内存块末尾设置一个保护页,当访问到这个保护页时就会触发异常,从而识别出野指针、内存越界;
【点击】
【定位成功】
3.选择Before则会再分配的内存块前设置一个保护页;
这个功能会消耗内存、降低检查速度,建议仅用于64位或短时间运行的程序。
12、Freed memory protection
>>>
点击内存越界,自动定位到这里
13、Leak details
>>>
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类似,不过会将其它的记录认为是可能存在的内存泄漏,也会记录到文件中,可以通过过滤器中【可能的内存泄漏】选项过滤。
【具体每一个效果怎么样,大家多训练】这里只是演示一下
![图片[36]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134213528-01735969333.gif?v=1735969334)
14、Minimum leak size
>>>
- Minimum leak size: 设置记录内存泄漏的最小字节数,低于设置值的内存泄漏不会被记录;
15、Control leak recording
>>>
Control leak recording:控制记录内存泄漏的开关、记录时间段等,更加灵活的记录分析内存泄漏的功能(例如记一个数组不断添加堆内存数据,很长一段时间才会释放一次,这种就是特殊情况的内存泄漏,就可以通过n/f快捷键来控制检测);
OFF:关闭终端,始终开启内存泄漏记录;
On (Start Disabled):打开终端,Heob启动时不记录内存泄漏,可在终端中进行控制;
On (Start Enabled):打开终端,Heob启动时就开始记录内存泄漏,并且可在终端中进行控制。
16、Extra arguments
>>>
用于输入运行其它Heob参数,例如输入
-vleaks.svg会将检测结果生成svg矢量图;
17、带大家实操一遍
>>>
【1】使用Heob分析qt 程序内存泄漏
打开测试代码,使用MSVC编译器、Debug模式进行编译,保留pdb符号表;
编译生成可执行程序;
点击【分析】【Heob】【OK】启动程序进行分析;
当程序运行后分别点击【泄漏1】【泄漏2】按键,然后退出程序,程序退出后会将分析结果生成位leaks.xml文件,并在调试窗口显示检测到的内存泄漏;
生成的检测结果会有许多动态库中的误报,可以点击调试窗口上的过滤图标,取消勾选【外部错误】项(如果MSVC版本<=2017则勾选外部错误);
检测结果如下所示,出现两个内存泄漏,大小分别是409600字节和16字节。
【2】使用Heob检测qt 程序野指针/内存越界
- 打开Heob窗口;
- 将Page protection选为【After】或者【Before 】;
- 点击开始检测,运行野指针代码就可以成功捕获到野指针异常。
- 由于野指针、内存越界都是不可恢复的异常,所以检测到这类异常后会直接终止Heob。
![图片[45]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134229579-91735969349.gif?v=1735969352)
>>>
使用Heob检测qt 程序空指针/throw抛出异常
打开Heob窗口;
使用默认设置;
点击开始检测,运行野指针代码就可以成功捕获到空指针、抛出异常。
由于空指针异常无法恢复,检测到后会终止Heob;
如果throw抛出异常后没有被try捕获,则会被Heob检测到,并触发终止,如果被try捕获,则Heob无法检测。
![图片[47]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134234439-21735969354.gif?v=1735969355)
>>>
使用Heob检测qt 程序重复释放
打开Heob窗口;
勾选Raise breakpoint exception on error: 表示出现异常时触发断点,如果不勾选就只会保存到检测结果;
再勾选Run with debugger ,在出现重复释放异常时,就会触发断点,进入调试。
>>>
使用Heob检测qt 程序长生命周期式内存泄漏
这里的长生命周期式内存泄漏不同于普通内存泄漏使用new分配了而没有delete;
长生命周期内存泄漏指使用new分配了内存,过了很长时间才会delete,例如成员指针、全局变量、静态变量等;
这类内存泄漏会更加难以排查,也容易造成严重问题。
测试方法1: 无法检测到长生命周期内存泄漏
打开Heob进行检测;
点击按键,向成员数组中new大量变量;
过一段时间后再释放成员数组中的所有内存;
无法检测到出现内存泄漏;
测试方法1: 无法检测到长生命周期内存泄漏
打开Heob窗口;
如下图所示,选择Detect Leak Types(不必须),避免文件写入太多内存,检测大小设置为500字节(不必须),选择On(Start Disabled),在程序启动前不记录,在运行过程中通过终端命令行控制开始/结束记录的时机;
退出程序后就可以看见检测到的内存泄漏了。
在这里操作
| Heob源地址(需要自己编译成.exe) | https://github.com/ssbssa/heob |
| 下载dwarfstack.dll | https://github.com/ssbssa/dwarfstack/releases/download/2.2/dwarfstack-2.2-dlls.7z |
| Qt官方文档 | https://doc.qt.io/qtcreator/creator-heob.html |
| Qt官方文档 | https://doc.qt.io/qtcreator/creator-how-to-use-heob.html |
总结
>>>
所有资源获取
通过网盘分享的文件:Heob
链接: https://pan.baidu.com/s/1nA09RLDW_cDrrz6ISfzBKw?pwd=td25 提取码: td25


![图片[1]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134108598-01735969268.png?v=1735969268)
![图片[2]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134111118-91735969271.png?v=1735969271)
![图片[3]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134114461-51735969274.png?v=1735969274)
![图片[4]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134117480-101735969277.png?v=1735969277)
![图片[5]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134119528-51735969279.png?v=1735969279)
![图片[6]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134121888-31735969281.png?v=1735969281)
![图片[7]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134122313-31735969282.png?v=1735969282)
![图片[8]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134125529-41735969285.png?v=1735969285)
![图片[9]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134127200-11735969287.png?v=1735969287)
![图片[10]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134129749-21735969289.png?v=1735969289)
![图片[11]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134129279-91735969289.png?v=1735969290)
![图片[12]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134131718-81735969291.png?v=1735969291)
![图片[13]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134132950-11735969292.png?v=1735969292)
![图片[14]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134133940-41735969293.png?v=1735969293)
![图片[15]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134135958-91735969295.png?v=1735969295)
![图片[16]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134136917-81735969296.png?v=1735969297)
![图片[17]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134137560-41735969297.png?v=1735969298)
![图片[18]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134138857-31735969298.png?v=1735969299)
![图片[19]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134141531-01735969301.png?v=1735969302)
![图片[20]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134143653-101735969303.png?v=1735969303)
![图片[21]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134144297-01735969304.png?v=1735969305)
![图片[22]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134146623-61735969306.png?v=1735969307)
![图片[23]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134147603-01735969307.png?v=1735969308)
![图片[24]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134148316-91735969308.png?v=1735969309)
![图片[25]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134150309-01735969310.gif?v=1735969312)
![图片[26]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134152469-11735969312.png?v=1735969313)
![图片[27]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134153294-91735969313.gif?v=1735969315)
![图片[28]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134156267-61735969316.png?v=1735969317)
![图片[29]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134159751-31735969319.png?v=1735969319)
![图片[30]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134200518-101735969320.png?v=1735969320)
![图片[31]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134202379-91735969322.png?v=1735969322)
![图片[32]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134203827-81735969323.png?v=1735969324)
![图片[33]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134204864-11735969324.png?v=1735969325)
![图片[34]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134207910-61735969327.png?v=1735969327)
![图片[35]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134208763-51735969328.png?v=1735969329)
![图片[37]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134218798-31735969338.png?v=1735969338)
![图片[38]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134219334-61735969339.png?v=1735969339)
![图片[39]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134220458-71735969340.png?v=1735969340)
![图片[40]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134223458-81735969343.png?v=1735969343)
![图片[41]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134224432-01735969344.png?v=1735969345)
![图片[42]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134226963-61735969346.png?v=1735969346)
![图片[43]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134227916-21735969347.png?v=1735969347)
![图片[44]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134227436-51735969347.png?v=1735969348)
![图片[46]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134232839-61735969352.png?v=1735969353)
![图片[48]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134235997-81735969355.png?v=1735969356)
![图片[49]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134236818-61735969356.png?v=1735969357)
![图片[50]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134237120-41735969357.png?v=1735969358)
![图片[51]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134238593-21735969358.png?v=1735969359)
![图片[52]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134239809-61735969359.png?v=1735969360)
![图片[53]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134240924-41735969360.png?v=1735969361)
![图片[54]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134241984-11735969361.png?v=1735969361)
![图片[55]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134242249-31735969362.png?v=1735969362)
![图片[56]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134243103-41735969363.png?v=1735969363)
![图片[57]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134244329-81735969364.png?v=1735969364)
![图片[58]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134245178-101735969365.png?v=1735969365)
![图片[59]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134245954-51735969365.png?v=1735969366)
![图片[60]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134246898-11735969366.png?v=1735969366)
![图片[61]-Qt C++ 软件调试内存分析工具Heob(推荐三颗星)-Anlogic-安路社区-FPGA CPLD-ChipDebug](http://chipdebug.com/wp-content/uploads/2025/01/20250104134247149-31735969367.png?v=1735969367)



没有回复内容