ToB企服应用市场:ToB评测及商务社交产业平台

标题: Linux C++ 开发10 - 手把手教你使用valgrind性能分析工具 [打印本页]

作者: 河曲智叟    时间: 2024-9-24 08:44
标题: Linux C++ 开发10 - 手把手教你使用valgrind性能分析工具
Linux C++ 开发9 - 手把手教你使用gprof性能分析工具》一文中,我们解说了gprof工具的使用方法,本文将继承解说valgrind工具的使用方法。
1. 什么是valgrind?

Valgrind 是一个强大的内存分析工具,主要用于内存走漏检测、内存访问错误和性能分析。它是一个开源工具集,包罗多个工具,如Memcheck、Callgrind等。
Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。
Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU情况,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。

注意事项:
2. (Ubuntu)安装valgrind
  1. # 更新软件源
  2. sudo apt-get update
  3. # 安装valgrind
  4. sudo apt-get install valgrind
  5. # 验证valgrind是否安装成功
  6. valgrind --version
复制代码
3. valgrind工具的使用

3.1. 下令的语法格式

valgrind -q --tool= --log-file=  ./

示例:
  1. # 内存泄漏检测
  2. valgrind -q --tool=memcheck --leak-check=full --log-file=log.txt ./demo05.out
  3. # 针对memcheck也可以省略 --tool=memcheck
  4. valgrind -q --leak-check=full --log-file=log.txt ./demo05.out
复制代码
3.2. 工具选项

适用于所有Valgrind工具。
3.3. LOG信息输出

3.4. Demo演示

源码demo05.cpp:
  1. #include <iostream>
  2. int main()
  3. {
  4.     int* ptr = new int[10];
  5.     ptr[10] = 0; // 数组越界访问
  6.     delete[] ptr;
  7.     return 0;
  8. }
复制代码
编译程序:
  1. # 编译demo05.cpp
  2. # -g选项使编译结果保留调试符号表,内存分析工具发现错误时才能定位到代码行。
  3. g++ -g ./demo05.cpp -o ./demo05.out
复制代码
memcheck的使用:
  1. # 内存检测
  2. valgrind -q --tool=memcheck --leak-check=full ./demo05.out
  3. ==13097== Invalid write of size 4
  4. ==13097==    at 0x10918B: main (demo05.cpp:6)
  5. ==13097==  Address 0x4e270a8 is 0 bytes after a block of size 40 alloc'd
  6. ==13097==    at 0x48485C3: operator new[](unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
  7. ==13097==    by 0x10917E: main (demo05.cpp:5)
  8. ==13097==
复制代码
可以看到Valgrind输出了内存错误和走漏信息。
其他工具的使用:
  1. # callgrind
  2. valgrind --tool=callgrind --log-file=log.txt ./demo05.out
  3. # cachegrind
  4. valgrind --tool=cachegrind --log-file=log.txt ./demo05.out
  5. # helgrind
  6. valgrind --tool=helgrind --log-file=log.txt ./demo05.out
  7. # massif
  8. valgrind --tool=massif --log-file=log.txt ./demo05.out
复制代码
历史文章保举:

大家好,我是陌尘。
IT从业10年+, 北漂过也深漂过,目前暂定居于杭州,未来不知还会飘向何方。
搞了8年C++,也干过2年前端;用Python写过书,也玩过一点PHP,未来还会折腾更多东西,不死不休。
感谢大家的关注,等待与你一起成长。
【SunLogging】
扫码二维码,关注微信公众号,阅读更多精彩内容
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4