Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。

  Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:

  使用未初始化的内存 (Use of uninitialised memory)
  使用已经释放了的内存 (Reading/writing memory after it has been free’d)
  使用超过malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
  对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
  申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
  malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
  src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
  重复free

  1、编译安装 Valgrind:
wget http://valgrind.org/downloads/valgrind-3.4.1.tar.bz2
tar xvf valgrind-3.4.1.tar.bz2
cd valgrind-3.4.1/
./configure --prefix=/usr/local/webserver/valgrind
make
make install


  2、使用示例:对“ls”程序进程检查,返回结果中的“definitely lost: 0 bytes in 0 blocks.”表示没有内存泄漏。
[root@xoyo42 /]# /usr/local/webserver/valgrind/bin/valgrind --tool=memcheck --leak-check=full ls /
==1157== Memcheck, a memory error detector.
==1157== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==1157== Using LibVEX rev 1884, a library for dynamic binary translation.
==1157== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==1157== Using valgrind-3.4.1, a dynamic binary instrumentation framework.
==1157== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==1157== For more details, rerun with: -v
==1157==
bin   data0  dev  home  lib64       media  mnt  opt   root  selinux  sys       tcsql.db.idx.pkey.dec  ttserver.pid  var
boot  data1  etc  lib   lost+found  misc   net  proc  sbin  srv      tcsql.db  tmp                    usr
==1157==
==1157== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 1)
==1157== malloc/free: in use at exit: 28,471 bytes in 36 blocks.
==1157== malloc/free: 166 allocs, 130 frees, 51,377 bytes allocated.
==1157== For counts of detected errors, rerun with: -v
==1157== searching for pointers to 36 not-freed blocks.
==1157== checked 174,640 bytes.
==1157==
==1157== LEAK SUMMARY:
==1157==    definitely lost: 0 bytes in 0 blocks.
==1157==      possibly lost: 0 bytes in 0 blocks.
==1157==    still reachable: 28,471 bytes in 36 blocks.
==1157==         suppressed: 0 bytes in 0 blocks.
==1157== Reachable blocks (those to which a pointer was found) are not shown.
==1157== To see them, rerun with: --leak-check=full --show-reachable=yes


  3、使用示例:对一个使用libevent库编写的“httptest”程序进程检查,返回结果中的“definitely lost: 255 bytes in 5 blocks.”表示发生内存泄漏。
[root@xoyo42 tcsql-0.1]# /usr/local/webserver/valgrind/bin/valgrind --tool=memcheck --leak-check=full ./httptest
==1274== Memcheck, a memory error detector.
==1274== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==1274== Using LibVEX rev 1884, a library for dynamic binary translation.
==1274== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==1274== Using valgrind-3.4.1, a dynamic binary instrumentation framework.
==1274== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==1274== For more details, rerun with: -v
==1274==
==1274== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 1005 from 2)
==1274== malloc/free: in use at exit: 402,291 bytes in 74 blocks.
==1274== malloc/free: 15,939 allocs, 15,865 frees, 6,281,523 bytes allocated.
==1274== For counts of detected errors, rerun with: -v
==1274== searching for pointers to 74 not-freed blocks.
==1274== checked 682,468,160 bytes.
==1274==
==1274== 255 bytes in 5 blocks are definitely lost in loss record 17 of 32
==1274==    at 0x4A05FBB: malloc (vg_replace_malloc.c:207)
==1274==    by 0x3C1D809BC6: evhttp_decode_uri (http.c:2105)
==1274==    by 0x401C75: tcsql_handler (in /data0/tcsql/cankao/tcsql-0.1/tcsql)
==1274==    by 0x3C1D80C88F: evhttp_get_body (http.c:1582)
==1274==    by 0x3C1D8065F7: event_base_loop (event.c:392)
==1274==    by 0x403E2F: main (in /data0/tcsql/cankao/tcsql-0.1/tcsql)
==1274==
==1274== LEAK SUMMARY:
==1274==    definitely lost: 255 bytes in 5 blocks.
==1274==      possibly lost: 0 bytes in 0 blocks.
==1274==    still reachable: 402,036 bytes in 69 blocks.
==1274==         suppressed: 0 bytes in 0 blocks.
==1274== Reachable blocks (those to which a pointer was found) are not shown.
==1274== To see them, rerun with: --leak-check=full --show-reachable=yes


  检查httptest程序,发现有一处“char *decode_uri = evhttp_decode_uri(evhttp_request_uri(req));”中的“decode_uri”没有被free,再程序处理完成后加上“free(decode_uri);”后,再使用Valgrind检查,结果已经是“definitely lost: 0 bytes in 0 blocks.”。



技术大类 » 其他Unix技术 | 评论(46) | 引用(8) | 阅读(56198)
美国VPS推荐 Homepage
2009-8-1 12:57
路过学习。。。


美国VPS推荐
ritto
2009-8-1 13:55
学习。。。。
偶行偶酷
2009-8-2 09:39
如果要查 一些java 程序

或者jsp  , php  等web 程序 如何查?

是 valgrind --tool=memcheck --leak-check=full /usr/bin/local/bin/php /web/www/index.php

这样吗?
张宴 回复于 2009-8-3 21:35
PHP一般情况下不free数组、变量不会有内存泄漏问题,PHP引擎会在程序执行结束时自动释放内存。但是,如果PHP对象存在递归引用等,会出现内存泄漏问题。
ZNZ Homepage
2009-8-3 12:35
很好 学习了
卢松松 Email Homepage
2009-8-3 13:14
不错 我也受教了
vps观察者 Homepage
2009-8-4 17:34
目前正在学习linux,受教了。zan
tsseo Email Homepage
2009-8-4 17:59
很实用的工具!呵呵,学习了!-SEOER
eyre
2009-8-7 10:56
请问用的Linux内核版本号是多少?我也正研究这个工具,在2.6.18的系统下make部分老报什么"符号链接……不允许的操作",我不知道是不是还有什么没安装的
张宴 回复于 2010-4-1 17:28
2.6.18
tawl
2010-4-1 16:33
这个对于只能处理一些内存错误吧?
侬本多情 Email Homepage
2010-7-3 10:16
内存问题总是很头疼..
小yú Email
2010-7-20 00:07
动态跟踪有个不太方便的地儿:比如要跟踪一个服务,就有些不爽了,所以还需要静态检测先,呵呵至少俺个人认为如此呵呵
千书汇 Homepage
2010-10-18 15:45
不错学习了
louis vuitton uk Email Homepage
2011-11-23 09:13
This louis vuitton uk for sale belongs to the sounding just what are termed as Louis Vuitton vintage best sellers, many other products and services for the reason that range appearing companies.You will easily notice the unfold zippers of this coach outlet store online. That is the decoration. There are some inside pockets for you as well. They are easy to match your clothes and to carry.Let us inspire your inner beauty with fine christian louboutin sale. Purse the elegance in bridal wedding. Enjoy the fashion.
Louis Vuitton Neverfull Email Homepage
2012-4-21 17:57
www.lvbagsclassic.com are authorized authentic Louis Vuitton handbags outlet store. All the items at our site are 100% authentic. All our Louis Vuitton handbags will come with the authenticity card, serial Number, dust bag and care booklet. We promise you will be 100% satisfied when you get such cheap authentic Louis Vuitton handbags from us!
Louis Vuitton Neverfull
Hogan
2012-5-10 18:01
IssuesFinally fiscale, un sacco di uomini e donne non dovranno avere il commercialista per aiutarti a queste persone che utilizzano fiscale soprattutto perché può essere più realizzato per mezzo di suo posto Hogan di lavoro, ci sono occasioni in cui si può sicuramente trovare sul proprio volere risorse umane suggerimenti. Non importa se vi capita di essere interessati a problemi circa dono di prelievo denaro o forse avere una serie di suggerimenti fiscali, la loro spesso preferibile a chiedere nel caso in cui youre chiaro.
hogan280 Email
2012-5-10 18:10
Finora, così tipico. Dei 17.000 casi di reati sessuali che coinvolgono bambini sotto i 16 anni solo 4000 è andato in tribunale lo scorso anno, secondo i CPS. Questo è poco meno di un quarto di tutti i casi segnalati. E secondo NSPCC di ricerca, un terzo (34%) dei bambini che vengono abusati sessualmente non dirlo a nessuno in tutto, per non parlare di segnalarlo alla polizia. Eppure il caso della adolescente e il Hogan negozio asporto controtendenza il trend statistico di questa settimana quando le prove della ragazza costituito una parte centrale del processo contro una banda di nove uomini, che sono stati condannati ciascuno a tra i quattro ei 19 anni dopo essere stato giudicato colpevole di 25 bambino reati sessuali, compreso lo stupro e il traffico.
Louis Vuitton UK Email Homepage
2012-5-19 16:08
Louis Vuitton UK are diversified in various kinds, handbags, backpacks, portable bags, purses, wallets and pouches. All kinds are popular among the whole word people.That publication was the only French periodical to mention the book, Louis Vuitton is the country's biggest advertiser in the press. 
Louis Vuitton Email Homepage
2012-5-19 16:22
During World War II, Louis Vuitton collaborated with the Nazis during the German occupation of France.I know someone has already sent you some photo's of the amazing Marc Jacobs/Louis Vuitton UK exhibition at the Musee Des Arts Decoratifs but I just had to share with you the day I had today . 
分页: 1/3 第一页 1 2 3 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]