您的位置:首页 > 运维架构 > Linux

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++ 程序中内存管理的错误。可以检查出下列几种内存操作上的错误:

  读写已经释放的内存

  读写内存块越界(从前或者从后)

  使用还未初始化的变量

  将无意义的参数传递给系统调用

  内存泄漏

1.下载Valgrind:

  http://www.valgrind.org/downloads/current.html#current

2.解压:

[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/7732906

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息