使用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 及其子函数的调用图,它类似
相关文档:
如果因为忘了root口令导致无法登录系统,请试用下面的方法来改忘记的root口令:
方法一:
1、重新启动系统。待系统启动到grub或lilo(现在一般是grub)引导菜单时,找到系统当前引导项(可以按方向键展开隐藏的菜单);
2、把光标定位在该选项上按下字母“e”键进入这个引导的编辑状态;
3、该选项 ......
1.验证系统确实运行了TCP/IP协议,并且拥有一个IP地址。如果没有,清添加协议和地址。
2.如果服务器还运行其它协议(IPX/SPX、NetBEUI等协议),至少在进行测试时要删除这些协议,然后以后再恢复这些协议。
3.验证使用这台服务器的IP地址是否可以“ping”通系统。如果不能,验证你从服务器本身是否可以“p ......
0/vi的使用:
Ctrl + f 屏幕向前翻动一页(常用)
Ctrl + b 屏幕向后翻动一页(常用)
Ctrl + d 屏幕向前翻动半页
Ctrl + u 屏幕向后翻动半页
n<space> 按下数字后再按空格键,光标会向右移动这一行的n个字符。例如:20<space>,则光标会向右移动20个字符
0 &nbs ......
1.互斥锁的存在问题:
互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。设想一种简单情景:多个线程访问同一个共享资源时,并不知道何时应该使用共享资源,如果在临界区里加入判断语句,或者可以有效,但一来效率不高,二来复杂环境下就难以编写了,这是我们需要一个结构,能在条件成立时触发相应线程,进行变量修改 ......
转自:
http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
本文列出了大部分常见的Linux系统调用,并附有简要中文说明。
以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使 ......