如何统计函数调用关系

cphj 2009-12-10 11:40:02
请问有没有工具可以统计输出函数调用关系?

要求:
必须能够按文本输出结果!象source insight那样只能显示,不能输出的不行

必须能够自动化进行!不能手工一个个找

最好能对整个工程进行统计输出

背景:
嵌入式系统的代码,需要找到“热点”函数(占用处理器时间开销大)进行算法优化

已经在仿真环境下跑了代码,得到了各调度任务的各函数及其子函数的运行时间,但是仿真环境并不按照call stack来记录函数之间的调用情况

结果是,往往一个大的热点函数会包含几个热点子函数,现在需要定位到底是大的热点函数需要优化,还是子函数需要优化,还是都需要优化。所以需要根据调用关系从大函数的时间开销中减去各子函数的开销

因为这个优化分析方案需要推广到多个项目组,所以大部分工作需要自动化,不能让人来一个个找调用关系
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
forster 2009-12-10
  • 打赏
  • 举报
回复
每个函数 开始和结束之前 计算下时间差

freshui 2009-12-10
  • 打赏
  • 举报
回复
这个主要要看你的硬件平台了,如果你用的是MIPS芯片
装完mips sde后,再找个MIPS-simulator,将你编译的好的code(编译的时候加上-pg选项)在simulator上运行,生成一个log文件, 然后用gprof工具分析log即可

不过模拟器跑起来很慢的啊,通常硬件上一分钟左右能搞定的事,模拟器上可能要跑一个晚上才能出来同样的结果
cphj 2009-12-10
  • 打赏
  • 举报
回复
多谢,我去搜索一下profile

有经验的也请介绍一下,这个能仿真实时操作系统(如vxworks)吗?
skysoshy 2009-12-10
  • 打赏
  • 举报
回复
楼主是不是做基于linux 的程序? 如果是的话, 可以使用pvtrace 来分析, 可以输出函数调用过程 和函数调用次数, 支持输出。
zdeepblue 2009-12-10
  • 打赏
  • 举报
回复
我用valgrind
它的profile有这些东东哦
freshui 2009-12-10
  • 打赏
  • 举报
回复
好像是 gprof

做profile的
freshui 2009-12-10
  • 打赏
  • 举报
回复
做一个该硬件仿真环境的模拟器,记得已经有这个东西了,叫什么忘了... 曾经用它统计过函数的开销,找到调用最频繁、耗时最大的函数来优化

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧