一、安装valgrind

安装valgrind,正常的三部曲configure/make/make install就行。

二、memchk使用

1、执行命令

[root@10g-host4 tools]# valgrind --track-fds=yes --log-file=memchk-svr.log --tool=memcheck --leak-check=full --show-reachable=yes ./udp-pacing/valgrind_svr

2、查看日志

185 ==29107== 208 bytes in 1 blocks are definitely lost in loss record 9 of 12
186 ==29107== at 0x4A05FEF: calloc (vg_replace_malloc.c:711)
187 ==29107== by 0x4030F4: wmp_sender_init (wmp_impl.c:237)
188 ==29107== by 0x4034B5: wmp_socket_new_impl (wmp_impl.c:327)
189 ==29107== by 0x4069D6: handle_packet (wmp_impl.c:1434)
190 ==29107== by 0x406D2E: wmp_socket_notify_packet (wmp_impl.c:1500)
191 ==29107== by 0x409DC2: udp_recvfrom (pt_session_udp.c:321)
192 ==29107== by 0x415487: event_process_active_single_queue (event.c:1346)
193 ==29107== by 0x415487: event_process_active (event.c:1416)
194 ==29107== by 0x415487: event_base_loop (event.c:1617)
195 ==29107== by 0x402839: main (valgrind_svr.c:167)

3、分析日志

“definitely lost ”这是说明确定无疑地发生了内存泄露。

wmp_impl.c:237  sender_t *s = calloc(1, sizeof(sender_t));

wmp_sender_init()函数名,在237行申请了内存空间,却没有释放。

三、callgrind

1、执行命令

[root@10g-host4 tools]# valgrind --tool=callgrind ./udp-pacing/valgrind_svr

[root@10g-host4 udp-pacing]# ps -ef | grep valgrind
root 29980 13926 5 11:06 pts/0 00:00:01 valgrind --tool=callgrind ./udp-pacing/valgrind_svr
root 29984 28594 0 11:06 pts/1 00:00:00 grep valgrind
[root@10g-host4 udp-pacing]# kill -USR1 29980        发送信号给应用进程
[root@10g-host4 udp-pacing]# ps -ef | grep valgrind
root 30012 28594 0 11:06 pts/1 00:00:00 grep valgrind

[root@10g-host4 tools]# ll callgrind.out.29980    
-rw------- 1 root root 73177 Jan 6 11:06 callgrind.out.29980

2、打印图形

到官方网站下载最新gprof2dot.py程序,旧版本不支持某些参数,https://github.com/jrfonseca/gprof2dot。

[root@10g-host4 tools]#valgrind --tool=callgrind ./udp-pacing/ut_cmp_server

[root@10g-host4 tools]# python gprof2dot-2015.12.1/gprof2dot.py -f callgrind callgrind.out.29980  -z main -e0 -n0 > callgrind.out

[root@10g-host4 tools]# dot -Tjpg callgrind.out -o call.jpg

valgrind的memchk和callgrind的更多相关文章

  1. valgrind 生成mysqld调用图之 select now()跟踪

    1.mysqld起动方式: 1.mysqld以root用户运行 valgrind --tool=callgrind --separate-threads=yes  --trace-children=y ...

  2. 移植Valgrind检测Android JNI内存泄漏

    1.相关工具 Valgrind:从Valgrind官网下载最新的源码包,我这里用的是:valgrind 3.14.0 (tar.bz2) [17MB] - 9 October 2018. Ubuntu ...

  3. Valgrind使用指南和错误分析

    Valgrind使用指南和错误分析 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视 ...

  4. Valgrind查找内存泄露利器

    Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的ma ...

  5. 嵌入式linux应用程序调试方法

    嵌入式linux应用程序调试方法 四 内存工具 五 C/C++代码覆盖.性能profiling工具 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来 ...

  6. Valgrind.Callgrind使用

    Callgrind介绍 用来对统计程序的函数调用之间的关系, 并统计每个函数的耗时 Callgrind之所以能够发现函数调用的关系, 依赖于平台的明确返回和调用指令. 在x86和amd64平台上wor ...

  7. valgrind的callgrind工具进行多线程性能分析

    1.http://valgrind.org/downloads/old.html 2.yum install valgrind Valgrind的主要作者Julian Seward刚获得了今年的Goo ...

  8. 使用valgrind检查内存

    Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试 ...

  9. 【转】 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

    系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工具来 ...

随机推荐

  1. Python笔记-进程Process、线程Thread、上锁

    1.对于操作系统来说,一个任务就是一个进程(Process).比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程. 2.在一个进程内部,要同时干多件事,就需要同时运行多个“ ...

  2. java基础 01

    java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...

  3. SSL延迟有多大?(转)

    add by zhj: SSL层在TCP层之上,SSL握手是在TCP握手完成之后,除了这点之外,两者应该是相对独立的过程.在服务端,这两个过程有可能不在同一台主机上, 比如服务端用LVS+Nginx实 ...

  4. Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch(1)

    继PHP.Ruby.Python和Perl之后,Elasticsearch最近发布了Elasticsearch.js,Elasticsearch的JavaScript客户端库.可以在Node.js和浏 ...

  5. vxworks 的 socket, thread, 信号量模型

    http://www.vxdev.com/docs/vx55man/vxworks/netguide/c-sockets.html http://www.vxdev.com/docs/vx55man/ ...

  6. odoo继承父类中的函数(方法)

    使用_inherit继承父类重新设计新类时,可以调用父类中的函数,具体为: 第一步:获得某个模型('model.name')的数据集并进行某种集合操作(model_function),从而获得想要的数 ...

  7. python学习笔记(二十三)私有方法和私有属性

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Person类的定义来看,外部代码还是可以自由地修改一个实例的nam ...

  8. UVA10700:Camel trading(栈和队列)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/J 题目大意: 给一个没有加上括号的表达式且只有+ , ...

  9. SDUT中大数实现的题目,持续更新(JAVA实现)

    SDUT2525:A-B (模板题) import java.util.Scanner; import java.math.*; public class Main { public static v ...

  10. appium 智能滚动