[发明专利]一种统计函数运行状态的方法和装置有效
申请号: | 200910076748.9 | 申请日: | 2009-01-16 |
公开(公告)号: | CN101477491A | 公开(公告)日: | 2009-07-08 |
发明(设计)人: | 陈世兴;王森波 | 申请(专利权)人: | 杭州华三通信技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/48 |
代理公司: | 北京德琦知识产权代理有限公司 | 代理人: | 王一斌;王 琦 |
地址: | 310053浙江省杭州市高新技术产业*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 统计 函数 运行 状态 方法 装置 | ||
技术领域
本发明涉及计算机领域的函数统计技术,具体涉及统计函数运行状态的方法和装置。
背景技术
通信产品一般都是基于任务调度的嵌入式系统。任务是嵌入式系统中集合各种系统资源实现特定功能的最小运行单元。一个任务包括多个函数,任务中的函数可以被认为是任务的最小构成单元。
嵌入式系统通常依赖于任务主动释放CPU资源实现任务间调度。如果某个或某些任务占用时间过长,会导致其它任务得不到调度,产生死循环。时钟中断提供了对各任务占用时间的统计功能。当检测到系统中某个任务占用时间过长时,会在屏幕上打印调用栈。调用栈包括占用时间过长的任务所调用函数的名称和顺序。用户根据打印出来的调用栈进行分析,找出怀疑占用时间过长的函数,然后对被怀疑的函数进行运行状态测试,以定位死循环出现的位置。
函数的运行状态测试主要包括统计被怀疑函数的运行时间,其方式是在源代码中针对被怀疑的各函数分别增加用于统计函数运行时间的统计代码,从而获得被怀疑函数的运行时间。
但是,增加的统计代码保留在源代码中,每次源代码被执行这些增加的统计代码也会被执行一遍,占用了额外的系统资源,影响源代码的运行效率。因此,最好是在统计结束后将增加的统计代码删除。但是,下次遇到需要统计函数运行状态的情况,又需要重新在源代码中加入统计代码。可见,由于现有函数运行状态的统计方案需要在源代码中增加统计代码,因此实现起来较为复杂。
发明内容
有鉴于此,本发明提供了一种统计函数运行状态的方法,不需要每次统计时都在源代码中增加统计代码,大大降低了统计函数运行状态的复杂度。
该方法包括:设置第一钩子函数、第二钩子函数和用于获取系统中被统计函数运行状态的代理函数;
当统计函数运行状态时,在用户替换命令的触发下将被统计函数动态替换为所述代理函数,所述被统计函数和代理函数有替代关系,是通过修改被统计函数的指令实现的,所述修改被统计函数的指令的方法是先将修改后的指令保存在数据缓存中,再被递送到内存中,然后清空指令缓存内容,当CPU读取被统计函数指令时,指令缓存从内存中获取修改后的被统计函数的指令;
所述代理函数顺序调用第一钩子函数、被统计函数和第二钩子函数;
所述第一钩子函数被调用时记录系统当前运行信息;
所述第二钩子函数被调用时记录系统当前运行信息,根据自身和所述第一钩子函数记录的系统当前运行信息统计被统计函数的运行状态。
其中,所述代理函数用于获取被统计函数的运行时间和/或被统计函数被执行过程中是否出现任务切换。
其中,当代理函数用于获取被统计函数的运行时间时,所述第一钩子函数被调用时记录系统当前时间;所述第二钩子函数被调用时记录系统当前时间,并将自身记录的当前时间与第一钩子函数记录的当前时间相减,得到被统计函数的运行时间。
较佳地,该方法进一步包括:预设所述代理函数执行除调用被统计函数之外的指令所消耗的时间长度;
第二钩子函数将自身记录的当前时间与第一钩子函数记录的当前时间相减之后,进一步从相减结果中减去预设的所述时间长度,得到被统计函数的运行时间。
其中,当代理函数用于获取被统计函数被执行过程中是否出现任务切换时,所述第一钩子函数被调用时将任务切换标记位设置为预设的特殊字符, 所述任务切换标记位在每次任务切换时被改变;所述第二钩子函数被调用时确认第一钩子函数中设置的特殊字符是否被改变,如果没有改变,则确定未出现任务切换,否则,确定出现了任务切换。
较佳地,所述代理函数进一步用于统计被统计函数的执行次数;
该方法进一步包括:设置用于表示被统计函数执行次数的次数统计变量,每次执行代理函数时令所述次数统计变量递增。
较佳地,所述将被统计函数动态替换为所述代理函数;所述代理函数顺序调用第一钩子函数、被统计函数和第二钩子函数包括:
被统计函数被调用时,保存被统计函数的函数地址、参数和返回地址,采用代理函数的函数地址替代被统计函数的函数地址,令程序代码跳转到代理函数;
所述代理函数调用第一钩子函数,在第一钩子函数中记录系统当前运行信息;所述第一钩子函数执行完毕,返回所述代理函数;
所述代理函数恢复保存的被统计函数的参数和函数地址,调用被统计函数;被统计函数执行完毕返回所述代理函数;所述代理函数保存被统计函数的返回值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州华三通信技术有限公司,未经杭州华三通信技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910076748.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:预防总线交易碰撞的方法与计算机系统
- 下一篇:微控制器及其程序更新方法