Valgrind工具:Linux 平台中调试 C C++ 内存泄漏
2017-04-01 13:43
381 查看
Valgrind 是帮助程序员寻找程序里的 bug 和改进程序性能的工具。程序通过 valgrind 运行时,valgrind 收集各种有用的信息,通过这些信息可以找到程序中潜在的 bug 和性能瓶颈。
Valgrind 现在提供多个工具,其中最重要的是 Memcheck,Cachegrind,Massif 和 Callgrind。Valgrind 是在 Linux 系统下开发应用程序时用于调试内存问题的工具。它尤其擅长发现内存管理的问题,它可以检查程序运行时的内存泄漏问题。其中的 memecheck 工具可以用来寻找 c、c++ 程序中内存管理的错误。可以检查出下列几种内存操作上的错误:
读写已经释放的内存
读写内存块越界(从前或者从后)
使用还未初始化的变量
将无意义的参数传递给系统调用
内存泄漏
执行以下代码运行自己的工程可执行文件 vmpf:
常用选项,适用于所有Valgrind工具:
1. -tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
2. h –help 显示帮助信息。
3. -version 显示valgrind内核的版本,每个工具都有各自的版本。
4. q –quiet 安静地运行,只打印错误信息。
5. v –verbose 更详细的信息, 增加错误数统计。
6. -trace-children=no|yes 跟踪子线程? [no]
7. -track-fds=no|yes 跟踪打开的文件描述?[no]
8. -time-stamp=no|yes 增加时间戳到LOG信息? [no]
9. -log-fd= 输出LOG到描述符文件 [2=stderr]
10. -log-file= 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
11. -log-file-exactly= 输出LOG信息到 file
12. -log-file-qualifier= 取得环境变量的值来做为输出信息的文件名。 [none]
13. -log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
LOG信息输出:
1. -xml=yes 将信息以xml格式输出,只有memcheck可用
2. -num-callers= show callers in stack traces [12]
3. -error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
4. -error-exitcode= 如果发现错误则返回错误代码 [0=disable]
5. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
6. -db-command= 启动调试器的命令行选项[gdb -nw %f %p]
适用于Memcheck工具的相关选项:
1. -leak-check=no|summary|full 要求对leak给出详细信息? [summary]
2. -leak-resolution=low|med|high how much bt merging in leak check [low]
3. -show-reachable=no|yes show reachable blocks in leak check? [no]
http://blog.csdn.net/huanggang982/article/details/48825287
https://www.ibm.com/developerworks/cn/linux/l-cn-memleak/#icomments
https://en.wikipedia.org/wiki/IBM_Rational_Purify
http://blog.csdn.net/21aspnet/article/details/8172124
https://www.oschina.net/translate/valgrind-memcheck
4000
Valgrind 现在提供多个工具,其中最重要的是 Memcheck,Cachegrind,Massif 和 Callgrind。Valgrind 是在 Linux 系统下开发应用程序时用于调试内存问题的工具。它尤其擅长发现内存管理的问题,它可以检查程序运行时的内存泄漏问题。其中的 memecheck 工具可以用来寻找 c、c++ 程序中内存管理的错误。可以检查出下列几种内存操作上的错误:
读写已经释放的内存
读写内存块越界(从前或者从后)
使用还未初始化的变量
将无意义的参数传递给系统调用
内存泄漏
1.下载Valgrind:
http://www.valgrind.org/downloads/current.html#current2.解压:
[root@localhost opt]# tar -xjvf valgrind-3.12.0.tar.bz2
3.配置安装路径:
[root@localhost valgrind-3.12.0]# ./configure --prefix=/usr/local/valgrind [root@localhost valgrind-3.12.0]# make [root@localhost valgrind-3.12.0]# make install
4.创建软链接:
为了在任何地方能够直接使用 valgrind 相关命令,而不用加路径,所以要创建软链接,相当于windows上的快捷方式。[root@localhost bin]# pwd /usr/local/valgrind/bin [root@localhost bin]# ln -s /usr/local/valgrind/bin/valgrind /usr/local/bin/
5.进入C++工程目录:
[qianzhisrv@localhost vmpf-V1.0.2]$ pwd /home/qianzhisrv/VMPF/vmpf-V1.0.2
执行以下代码运行自己的工程可执行文件 vmpf:
[qianzhisrv@localhost vmpf-V1.0.2]$ valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --error-exitcode=111111 --error-limit=no --quiet --log-file=/home/qianzhisrv/VMPF/vmpf-V1.0.2/logdir/log.log ./vmpf
备注:Valgrind 使用
用法: valgrind [options] prog-and-args [options]常用选项,适用于所有Valgrind工具:
1. -tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
2. h –help 显示帮助信息。
3. -version 显示valgrind内核的版本,每个工具都有各自的版本。
4. q –quiet 安静地运行,只打印错误信息。
5. v –verbose 更详细的信息, 增加错误数统计。
6. -trace-children=no|yes 跟踪子线程? [no]
7. -track-fds=no|yes 跟踪打开的文件描述?[no]
8. -time-stamp=no|yes 增加时间戳到LOG信息? [no]
9. -log-fd= 输出LOG到描述符文件 [2=stderr]
10. -log-file= 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
11. -log-file-exactly= 输出LOG信息到 file
12. -log-file-qualifier= 取得环境变量的值来做为输出信息的文件名。 [none]
13. -log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
LOG信息输出:
1. -xml=yes 将信息以xml格式输出,只有memcheck可用
2. -num-callers= show callers in stack traces [12]
3. -error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
4. -error-exitcode= 如果发现错误则返回错误代码 [0=disable]
5. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
6. -db-command= 启动调试器的命令行选项[gdb -nw %f %p]
适用于Memcheck工具的相关选项:
1. -leak-check=no|summary|full 要求对leak给出详细信息? [summary]
2. -leak-resolution=low|med|high how much bt merging in leak check [low]
3. -show-reachable=no|yes show reachable blocks in leak check? [no]
参考:
http://blog.csdn.net/sduliulun/article/details/7732906http://blog.csdn.net/huanggang982/article/details/48825287
https://www.ibm.com/developerworks/cn/linux/l-cn-memleak/#icomments
https://en.wikipedia.org/wiki/IBM_Rational_Purify
http://blog.csdn.net/21aspnet/article/details/8172124
https://www.oschina.net/translate/valgrind-memcheck
4000
相关文章推荐
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- Linux C/C++ 内存泄漏检测工具:Valgrind
- Linux C/C++ 内存泄漏检测工具:Valgrind
- Linux C/C++内存泄漏检测工具:Valgrind
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- Linux C/C++ 内存泄漏检测工具:Valgrind
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- 在Linux平台中调试C/C++内存泄漏方法 (腾讯和MTK面试的时候问到的)
- Linux C/C++ 内存泄漏检测工具:Valgrind
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- Linux C/C++ 内存泄漏检测工具:Valgrind - 张宴的博客 - Web系统架构与底层研发
- Linux C/C++ 内存泄漏检测工具:Valgrind
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- (转)在 Linux 平台中调试 C/C++ 内存泄漏方法
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- 转载:在Linux平台中调试C/C++内存泄漏方法
- Linux C/C++ 内存泄漏检测工具:Valgrind
- 在 Linux 平台中调试 C/C++ 内存泄漏方法