一、安装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. arcgis server/portal 日志格式化脚本

    友好化格式阅读 背景 通过arcgis for server manager中的logs选项卡可以查看当前站点的日志.其该页面提供了友好的日志显示方式. 但是在实际情况中,如arcgis server ...

  2. python基础-第十篇-10.2CSS基础

    CSS是Cascading Style Sheet的简称,中文为层叠样式表 属性和属性值用冒号隔开,以分号结尾 引入方式 行内式--在标签的style属性中设定CSS样式 <body> & ...

  3. Linux进程虚拟地址空间管理2

    2017-04-12 前篇文章对Linux进程地址空间的布局以及各个部分的功能做了简要介绍,本文主要对各个部分的具体使用做下简要分析,主要涉及三个方面:1.MMAP文件的映射过程 2.用户 内存的动态 ...

  4. LInux下桥接模式详解三

    上篇文章介绍了Linux内核桥接模式涉及到的几个结构,本节就重点放在数据包的处理上! 本节所有代码参考LInux 3.10.1内核! 前面已经提到一个数据包从网卡流到Linux内核中的L2层,最终被交 ...

  5. Java-多线程基本

    Java-多线程基本 一 相关的概念 进程:是一个正在执行中的程序 每个进程都有一个执行的顺序,该顺序是一个执行路径,或者叫一个控制单元 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行 ...

  6. HBase 二次开发 java api和demo

    1. 试用thrift python/java以及hbase client api.结论例如以下:     1.1 thrift的安装和公布繁琐.可能会遇到未知的错误,且hbase.thrift的版本 ...

  7. POJ1265:Area(多边形面积公式+pick公式) 好题

    题目:http://poj.org/problem?id=1265 题意 : 给你一个点阵,上边有很多点连成的多边形,让你求多边形内部的点和边界上的点以及多边形的面积,要注意他每次给出的点并不是点的横 ...

  8. AngularJS 笔记系列(五)过滤器 filter

    过滤器是用来格式化给用户展示的数据的. 在 HTML 中的模板绑定符号{{}} 内通过|符号来调用过滤器. 大写:{{ name | uppercase }} 也可以在 JS 中进行调用$filter ...

  9. yield的表达式形式的应用(待补充)

    1.yield的表达式形式应用的定义: 在一个生成器函数内,将yield赋值给一个变量,这就是yield的表达式形式.也叫生成器的表达式形式 2.send方法的定义: (1)定义: yield的表达式 ...

  10. mac 安装Sequel Pro

    安装命令如下 Install the App Press Command+Space and type Terminal and press enter/return key. Run in Term ...