使用Gnu gprof进行Linux平台下的程序分析
O.S 使用Gnu gprof进行Linux平台下的程序分析
关 键 词:gprof callgraph 函数消耗的时间 Linux应用分析
阅读提示:本文介绍了如何使用Gnu gprof 对Linux平台下的现有程序进行优化分析和生成程序调用图。主要偏重于对生成和使用流程图作介绍。
Gprof 简介:
Gprof功能:打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。
有了函数的调用关系,这会让开发人员大大提高工作效率,不用费心地去一点点找出程序的运行流程,这对小程序来说可能效果不是很明显,但对于有几万,几十万代 码量的工程来说,效率是毋庸置疑的!而且这个功能对于维护旧代码或者是分析Open Source来说那是相当诱人的,有了调用图,对程序的运行框架也就有了一个大体了解,知道了程序的“骨架“,分析它也就不会再那么茫然,尤其是对自己不 熟悉的代码和Open Source。费话不多说了,让我们开始我们的分析之旅吧!
Gprof 实现原理:
通过在编译和 链接你的程序的时候(使用 -pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or “_mcount” , or “__mcount” , 依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信 息。
Gprof基本用法:
1. 使用 -pg 编译和链接你的应用程序。
2. 执行你的应用程序使之生成供gprof 分析的数据。
3. 使用gprof 程序分析你的应用程序生成的数据。
4. gprof产生的信息解释如下:
5.常用的Gprof 命令选项解释
-b不再输出统计图表中每个字段的详细描述。
-p 只输出函数的调用图(Call graph 的那部分信息)。
-q 只输出函数的时间消耗列表。
-E Name不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。
-e Name 不再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。
-F Name 输出函数Name 及其子函数的调用图,它类似
相关文档:
手头有个ep9315的板,今天突然想起跑一下adsl上网。晚上回来就开始搞。
从10点到现在,终于能够跑起来。
给大家借鉴一下。
1.编译内核,把ppp的那些选项选上。 (我用2.6.8.1的kernel,cirrus 的patch)
2.libpcap-0.9.1 这个包是pppd需要的。
./configure CC=arm-linux-gcc CFLAGS=-msoft-float --target=arm-linu ......
有时候文本文件(TXT)从windows存入linux时,
在linux下面查看文件的内容就会变成乱码,
用以下命令可以还txt文件本来的面目。
GB2312为windows系统中的内码,如果是其他的请改为相应内码
UTF-8是转换后的内码,因为LINUX 系统是支持UTF-8的,
所以文件内容即可正常显示。
iconv -f GB2312 -t UTF-8 tmp.txt>tmp1 ......
在 linux 下配置 ITK
1. 下载 CMake:http://www.cmake.org/cmake/resources/software.html
为方便安装,这里下载二进制文件,选择下载: cmake-2.6.4-Linux-i386.sh
2. 安装 CMake, 到 cmake-2.6.4-Linux-i386.sh 存放的目录,输入,可用 TAB 键方便补齐命令
#./ cmake-2. ......
第一步:在VMWARE中,运行启动LINUX后。点击VM->INSTALL VMWare TOOLS,点击OK。(补充:退出VMWARE回到XP用CTRL+ALT)
第二步:进入LINUX后,运行终端。执行mount /dev/cdrom以文件方式挂载光驱(如果没有第一步,就没有这一步,因为需要的TOOLS是以光驱文件形式存放) ......