Qt creator +Valgrind检测内存泄漏(linux)

在 Linux 系统下使用 Qt Creator 和 Valgrind 检测内存泄漏,可以按照以下步骤进行:

安装 Valgrind

确保系统已安装 Valgrind,若未安装,可使用以下命令安装:

bash 复制代码
sudo apt-get install valgrind

或者查看我的上一篇关于安装 Valgrind的部分

配置 Qt Creator

在 Qt Creator 中设置环境变量

  1. 打开项目: 打开您想要运行 Valgrind 的 Qt Creator 项目。

  2. 访问运行设置: 在菜单栏中,选择"项目">"项目设置"或者在左侧边栏中点击"项目"视图。

  3. 选择构建和运行套件: 在"项目"设置中,选择"构建和运行"选项卡。

  4. 编辑运行设置: 在"运行设置"部分,选择您想要配置的环境(例如,Debug 或 Release),然后点击"编辑"按钮。

  5. 添加环境变量: 在"运行设置"对话框中,找到"环境"部分。这里您可以添加或修改环境变量。

    • 点击"添加"按钮来创建一个新的环境变量。

    • 在"名称"字段中输入 VALGRIND_LIB。

    • 在"值"字段中输入 Valgrind 库文件的路径,例如 /usr/Valgrind-install/lib/valgrind。

  6. 保存设置: 完成环境变量的添加后,点击"确定"或"应用"按钮保存您的设置。

  7. 运行 Valgrind: 现在,当您在 Qt Creator 中运行 Valgrind 时,它应该能够读取到您设置的环境变量,并使用正确的库文件路径。

运行检测

  1. 点击 Qt Creator 中的"分析"菜单,选择"Valgrind Memory Analyzer" 。

  2. Qt Creator 会调用 Valgrind 自动分析程序,若程序较大,分析过程可能会较慢 。

分析结果

Valgrind 会输出内存泄漏的报告,报告中会详细列出泄漏的内存地址、泄漏的大小以及可能导致泄漏的对象类型 。重点关注以下几种泄漏类型:

  • definitely lost:明确泄漏,分配后无指针指向,无法释放 。

  • indirectly lost:因父对象泄漏导致的间接泄漏 。

  • possibly lost:可能泄漏,指针部分丢失 。

其他注意事项

  • 若程序中使用了 Qt 内部或系统库,可能会出现一些无害的泄漏,可以通过 suppression 文件忽略这些泄漏 。

  • 为了使 Valgrind 输出更详细的错误位置,编译程序时需加上-g选项 。

  • 定期在开发迭代中执行 Valgrind 检测,尤其在重构核心模块后,可帮助持续提升应用稳定性。

在 Qt Creator 或其他集成开发环境(IDE)中设置环境变量通常涉及几个问题。

注意事项

  • 确保您输入的路径是正确的,并且 Valgrind 库文件确实存在于该路径下。

  • 如果您的 Valgrind 安装在不同的路径下,或者您使用的是交叉编译环境,您需要相应地调整环境变量的值。

  • 在设置环境变量后,您可能需要重新启动 Qt Creator 或重新加载项目,以确保新的环境变量设置生效。

  • 若VALGRIND_LIB设置没有生效,则可以在运行时将export VALGRIND_LIB=/usr/Valgrind-install/lib/valgrind加入到自定义运行命令中,并使用echo $VALGRIND_LIB命令查看是否生效。

通过这些步骤,您应该能够在 Qt Creator 中成功设置并使用环境变量 VALGRIND_LIB 来运行 Valgrind。

相关推荐
深盾科技_Virbox1 分钟前
云端与本地并行交付,软件许可管理如何实现统一运营?
java·大数据·开发语言·安全
xiaoqiMikko2 分钟前
Linux 实战(三):服务起不来、定时任务不执行 —— CentOS 7 / Rocky 9 / Ubuntu 24.04 实测差异
linux·centos
Hello_Pyhx11 分钟前
Ventoy:Linux制盘与排障
linux·运维·服务器
xuxigifxfh28 分钟前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考
Wokoo732 分钟前
自动化测试入门:核心场景、回归测试与 Web 自动化环境搭建
java·开发语言·测试工具
Jason_zhao_MR33 分钟前
电力数据采集核心板选型指南
linux·嵌入式硬件·fpga开发·嵌入式
tachibana234 分钟前
Golang 中数组和切片的区别?
开发语言·后端·golang·数组·切片
microxiaoxiao40 分钟前
MobaXterm vs Aeroshell
linux·运维·ssh
智购科技无人售货机工厂店1 小时前
玻璃瓶饮料破损率突然上升,排查发现是取货口缓冲垫老化了~YH
java·开发语言·人工智能·python·eclipse
东城居士1 小时前
理解设备树下的platform驱动编写
linux·嵌入式系统