@mynameislu_tjsd:pahole安装及使用

标签: mynameislu tjsd pahole | 发表时间:2015-11-25 16:02 | 作者:yuanbor
出处:http://yuanbor.blog.163.com

2014-4-15阅读1031  评论0

前些天在寻找优化C语言内存占用的方法时看到了一篇文章觉得很好,链接 http://blog.jobbole.com/57822/

其中提到了一个工具pahole挺好用,所以网上搜索一番,安装上体验了一下,挺实用的东西。


pahole可以用来检查结构体中的内存漏洞,可以作为内存优化的一个工具。

我是在ubuntu上安装的,其他linux系统应该差不多。

1.下载pahole源码: https://github.com/jmesmon/pahole

也可以去我的资源下载:http://download.csdn.net/detail/mynameislu/7195913,其中包含了pahole、libebl-dev和libz

解压后查看README文件进行安装


2.安装pahole

我在安装pahole时缺了以下几个东西

cmake ----------->sudo apt-get install cmake

libdw-dev --------->sudo apt-get install libdw-dev

libebl-dev --------->这个用apt-get没有找到,所以上网找了个.deb文件安装的 https://launchpad.net/ubuntu/hardy/i386/libebl-dev/0.131-3

libz ----------->下载源码包,解压之后分别运行configure、make、make install即可。

上述内容安装完成后,进入pahole的源码目录。

cd pahole-master

mkdir build

cmake -D__LIB=lib ..

sudo make install

然后就完成安装了,默认安装到了/usr/local/目录下。


3.测试

test.c

#include <stdio.h>

typedef struct _st //这个地方必须要有结构体名称,否则pahole找不到结构体。

{

int a_int;

char b_char;

int c_int;

}st;


typedef struct _st2

{

int a_int;

char b_char;

char c_char;

int d_int;

}st2


int main()

{

st t;

st2 s; //需要使用结构体,否则pahole找不到结构体。

return 0;

}

编译test.c 时需要使用-g参数

gcc -g test.c -o test 或者 gcc -g -c test.c 生成test.o

编译完成后

pahole -V test 或 pahole -V test.o

打印出所有结构体的hole情况。


pahole -C _st test 或pahole -C _st test.o

只打印_st结构体的hole情况。


4.本文内容完,有发现比较好的工具的时候希望您能分享。

相关 [mynameislu tjsd pahole] 推荐: