news 2026/7/6 3:42:22

Valgrind的新手使用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Valgrind的新手使用指南

新手使用 Valgrind,只需要记住最核心的 3 步,非常简单。假设你写了一个代码叫main.cpp,下面是完整流程。

1. 第 1 步:安装

如果在 Linux 下(比如 Ubuntu),先装上它:

sudo apt-get install valgrind

2. 第 2 步:加-g编译你的代码

平时你怎么编译就怎么编译,唯一的区别是必须加上-g参数

加了-g,Valgrind 才能告诉你具体是哪一行代码出了问题。

g++ -g main.cpp -o app

(注意:如果你用的是 CMake,确保你的编译类型是 Debug,比如set(CMAKE_BUILD_TYPE Debug),它会自动带上-g

3. 第 3 步:用 Valgrind 启动你的程序

平时你运行程序是这样:./app

现在,把valgrind放在最前面,像这样运行:

valgrind --leak-check=full ./app

(如果你程序需要传参数,就跟在后面,比如valgrind --leak-check=full ./app 参1 参2


4. 第 4 步:看懂输出结果

程序运行结束后,终端会打印一堆带有==数字==的信息。你只要往下翻,重点看最后面的LEAK SUMMARY(泄漏总结)

情况 A:完美,没问题

如果看到类似这样:

All heap blocks were freed -- no leaks are possible

恭喜,没有任何内存泄漏!

情况 B:有内存泄漏

如果看到类似这样:

LEAK SUMMARY: definitely lost: 40 bytes in 1 blocks

说明泄漏了!这时候你往上翻报错信息,Valgrind 会明确告诉你哪一行出错了,比如:

==12345== by 0x401156: main (main.cpp:15)

这就告诉你,main.cpp的第 15 行分配的内存忘记释放了。去检查那一行代码加个delete或者free就行了。

总结:新手用 Valgrind,就是-g编译,然后valgrind --leak-check=full ./程序,最后看报错里的文件名和行号去改 bug。就这么简单。

如果项目调用了第3方库加上下面 3 个技巧,足够应对大部分情况了:

技巧 1:把日志保存到文件(极其重要)

如果你的项目很大,报错可能非常多,终端屏幕根本刷不下。你需要把 Valgrind 的输出存到文件里慢慢看。

实战用法:加上--log-file

valgrind --leak-check=full --log-file=valgrind_report.txt ./app

跑完之后,你只需要打开valgrind_report.txt慢慢搜索分析就行了。

技巧 2:在第三方库的"报错海"中找自己的 Bug(OpenCV 为例)

像 OpenCV、FFmpeg 这种库,底层为了性能往往会有一些"单例模式"或"全局缓存"不释放,Valgrind 会认为这也是内存泄漏,报出一大堆错误。

怎么办?不用害怕,也不用去改 OpenCV 的源码。看报错日志时,只找那些"调用栈里有你自己写的代码"的报错

比如报错栈里全是libopencv_core.so,直接跳过;如果某一行出现了main.cpp:80,这就说明是你调用不当或者你忘记释放了,重点盯住这块。

技巧 3:揪出"未初始化的随机值"引发的诡异 Bug

C++ 里最头疼的 Bug 之一就是:你声明了一个变量int a;但没给初始值,导致程序每次运行结果都不一样,甚至偶尔崩溃。Valgrind 如果报出类似这种错误:Conditional jump or move depends on uninitialised value(s),这就说明你用了没初始化的变量。

实战用法:加上--track-origins=yes参数。

valgrind --leak-check=full --track-origins=yes --log-file=valgrind_report.txt ./app

加了这个参数,Valgrind 会像开了天眼一样,精确告诉你:"这个没初始化的垃圾值,是在哪个文件的哪一行被创建出来的",帮你一秒定位!


总结:对于个人项目,真正够用且好用的排错命令是这句:

valgrind --leak-check=full --track-origins=yes --log-file=val_log.txt ./app

遇到 Bug 时,跑这句命令,然后打开val_log.txt搜索你的源文件名字(比如main.cpp),问题基本就迎刃而解了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 3:41:17

构建AI毒舌投资人:用Prompt工程验证副业想法的可行性

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在折腾各种 AI 工具时,我发现一个挺有意思的现象:很多人拿到一个强大的 AI 模型,比如 DeepSee…

作者头像 李华
网站建设 2026/7/6 3:40:49

CameraGraph™全域相机拓扑推理引擎 视频孪生跨镜目标连续追踪核心支撑 空间相机关系张量建模:根治跨镜头目标ID跳变、身份混淆底层算法拆解

CameraGraph™全域相机拓扑推理引擎 视频孪生跨镜目标连续追踪核心支撑 空间相机关系张量建模:根治跨镜头目标ID跳变、身份混淆底层算法拆解 一、引擎顶层定位与技术基线 CameraGraph™ 隶属于镜像视界浙江科技有限公司SpaceOS™十大自研演算引擎&#xff0…

作者头像 李华
网站建设 2026/7/6 3:38:30

Gromacs 分子动力学 远程安装介绍 全网最详细的Gromacs安装前说明 该怎么选择合适的安装方式 Windows直接可用的Gromacs(预编译版)有什么危害?Gromacs安装需要准备什么?

一、Gromacs 分子动力学该怎么选择合适的安装方式 出处:《智澈乐尚网络工作平台》 安装好的友友如需了解全面的流程请移步:《分子动力学新手入门:一文读懂GROMACS使用全流程,轻松开启模拟之旅》 模拟教程:【精准还原…

作者头像 李华
网站建设 2026/7/6 3:38:12

SRC信息收集续集

SRC 信息收集(续集) — 从插件到自动化,武装你的挖洞工具箱上节课我们聊了信息收集的理论和基本方法,今天我们来点硬核的:浏览器插件、端口扫描、Web 刺探,以及用 Python 把信息收集自动化起来。准备好了吗…

作者头像 李华