CN107544896A - 一种函数调用次数的统计方法、存储介质及终端设备 - Google Patents
一种函数调用次数的统计方法、存储介质及终端设备 Download PDFInfo
- Publication number
- CN107544896A CN107544896A CN201710686003.9A CN201710686003A CN107544896A CN 107544896 A CN107544896 A CN 107544896A CN 201710686003 A CN201710686003 A CN 201710686003A CN 107544896 A CN107544896 A CN 107544896A
- Authority
- CN
- China
- Prior art keywords
- call number
- values
- function
- debugging
- interrupted
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种函数调用次数的统计方法、存储介质及终端设备,所述方法包括:当执行分支指令时,触发调试中断并获取触发调试中断时的PC值;将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数。本发明通过分支指令触发调试中断,进入调试中断程序,并通过调试中断程序获取触发中断时的PC值,并将所述PC值的调用次数加一,再根据PC值在符号表中查找其对应的函数,进而将所述函数的调用次数加一,实现了对函数调用次数的统计。并且本发明提供的统计方法可以对内核中存储的函数的调用次数进行统计,解决了嵌入式系统的函数的调用次数无法统计的问题。
Description
技术领域
本发明涉及嵌入式系统技术领域,特别涉及一种函数调用次数的统计方法、存储介质及终端设备。
背景技术
随着电子信息产业的发展,嵌入式系统的应用已逐渐渗透到工业控制、定位导航、移动终端等多个领域。由于嵌入系统已被方法应用,从而嵌入式系统性能成为人们关注的热点。而在嵌入式系统性能优化方法中,一种通过首先统计嵌入式系统中每个函数的执行次数,然后对执行次数在前10%的函数进行单独性能优化的方法可以很好提高分布式系统性能。对于上述优化方法,如何统计每个函数的执行次数成为分别行系统性能优化的关键步骤。
目前函数调用次数的统计方法普遍采用穷举法,即在每个函数入口增加调用次数,以统计每个函数的调用次数。但是,一方面由于嵌入系统置于内核,另一方面由于嵌入式系统内的函数个数成千上万,从而无法采用穷举法统计嵌入式系统的函数的调用次数。因此如何统计每个函数的执行次数成为有待解决的问题。
因而现有技术还有待改进和提高。
发明内容
本发明要解决的技术问题在于,针对现有技术的不足,提供一种函数调用次数的统计方法、存储介质及终端设备,实现了对嵌入式系统内函数调用次数的统计。
为了解决上述技术问题,本发明所采用的技术方案如下:
一种函数调用次数的统计方法,其包括:
当执行分支指令时,触发调试中断并获取触发调试中断时的PC值;
将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数。
所述函数调用次数的统计方法,其中,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值具体为:
检测当前执行的指令是否为分支指令;
当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值。
所述函数调用次数的统计方法,其中,所述当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值具体包括:
当检测到分支指令时,调用预设的中断向量以进入调试中断进程;
通过所述调试中断进程获取触发调试中断时PC寄存器的值以确定触发调试中断时的PC值。
所述函数调用次数的统计方法,其中,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值之前还包括:
预设建立一PC数组,用于存储PC值及其被调用的调用次数。
所述函数调用次数的统计方法,其中,所述将所述PC值对应的调用次数加一,并根据PC值的调用次数统计其对应函数的调用次数具体包括:
在所述PC数组中查找所述PC值;
若查找到所述PC值,则将所述PC值对应的调用次数加一,并根据所述PC数组来统计每个函数的调用次数。
所述函数调用次数的统计方法,其中,所述将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数还包括:
若未查找到所述PC值,则将所述PC值添加至所述PC数组,并将所述PC值对应的调用次数设为1,并根据所述PC数组来统计每个函数的调用次数。
所述函数调用次数的统计方法,其中,所述根据所述PC数组来统计每个函数的调用次数具体包括:
每间隔一段时间读取所述PC数据,并利用符号表查找所述PC数组中每个PC值对应的函数名称;
将每个PC值对应的函数名称添加至所述PC数组生成函数调用次数列表,并根据所述函数调用次数列表确定嵌入式系统内每个函数的调用次数。
一种存储介质,其存储有多条指令,所述指令适于由处理器加载并执行如上任一所述的函数调用次数的统计方法。
一种终端设备,其包括:
处理器,适于实现各指令;以及
存储设备,适于存储多条指令,所述指令适于由处理器加载并执行如上任一所述的函数调用次数的统计方法。
有益效果:与现有技术相比,本发明提供了一种函数调用次数的统计方法、存储介质及终端设备,所述方法包括:当执行分支指令时,触发调试中断并获取触发调试中断时的PC值;将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数。本发明通过分支指令触发调试中断,进入调试中断程序,并通过调试中断程序获取触发中断时的PC值,并将所述PC值的调用次数加一,再根据PC值在符号表中查找其对应的函数,进而将所述函数的调用次数加一,实现了对函数调用次数的统计。并且本发明提供的统计方法可以对内核中存储的函数的调用次数进行统计,解决了嵌入式系统的函数的调用次数无法统计的问题。
附图说明
图1为本发明提供的函数调用次数的统计方法较佳实施例的流程图。
图2为本发明提供的终端设备较佳实施例的结构原理图。
具体实施方式
本发明提供一种函数调用次数的统计方法、存储介质及终端设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。 应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。 应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
下面结合附图,通过对实施例的描述,对发明内容作进一步说明。
请参照图1,图1为本发明提供的函数调用次数的统计方法较佳实施例的流程图。所述方法包括:
S100、当执行分支指令时,触发调试中断并获取触发调试中断时的PC值;
S200、将所述PC值的调用次数加一,并根据PC值的调用次数来统计函数的调用次数。
本实施例提供了一种函数调用次数的统计方法,其通过分支指令触发调试中断,进入调试中断程序,并通过调试中断程序获取触发中断时的PC值,并将所述PC值的调用次数加一,再根据PC值在符号表中查找其对应的函数,进而将所述函数的调用次数加一,实现了对函数调用次数的统计。并且本发明提供的统计方法可以对内核中存储的函数的调用次数进行统计,解决了嵌入式系统的函数的调用次数无法统计的问题。
具体的来说,在所述步骤S100中,所述分支指令用于触发调试中的,并从当前指令跳转到调试中断进程,并通过调试中断进程获取触发中断时的PC值。在本实施例中,所述分支指令为跳转指令,其可以为BL命令或B命令。也就是说,检测到BL命令或B命令,则触发调试中断。所述调试中断一般通过中断向量来触发。所述中断向量可以为0x1000等。
示例性的,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值具体为:
S101、检测当前执行的指令是否为分支指令;
S102、当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值。
具体地,在所述步骤S101中,所述检测当前执行的指令是否为分支指令可以通过利用POWERPC CPU提供的调试中断(DEBUG中断)功能中的分支指令检测功能来检测当前执行的指令是否为分支指令。所述分支指令检测功能可以为通过检测当前执行的指令的反汇编是否携带BL或者B,如果携带,则为分支指令,如果未携带,则不为分支指令。在实际应用中,在检测当前执行的指令是否为分支指令之前还可以包括一个预先配置的过程,所述预先配置过程具体可以为:配置MSR(Machine Status Re gister,机器状态寄存器)中MSR[DE]=1,DBCR(Debug Control Register,调试控制寄存器)中DBCR0[BRT]=1,这样使得POWERPC CPU具有分支检测功能。
在所述步骤S102中,所述PC值指的是触发调试中断时PC寄存器的值,并且获取所述PC寄存器的值可以通过预设调试中断进程进行执行,并后续PC值对应的调用次数的统计均由所述中断进程执行。
示例性的,所述当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值具体可以包括:
S1021、当检测到分支指令时,调用预设的中断向量以进入调试中断进程;
S1022、通过所述调试中断进程获取触发调试中断时PC寄存器的值以确定触发调试中断时的PC值。
具体地,所述调试中断进程为预先设置,用于在检测到分支指令时执行的进程。也就是说,当检测到分支指令时,从当前执行的指令跳转到调试中断进程,以通过所述调试中断进程统计当前指令对应的调用函数的调用次数。
进一步,在所述步骤S200中,所述PC值与其对应的调用次数可以预先存储于一PC数组中,所述PC数组中的每个节点均包含两个元素,一个为PC值,一个为调用次数;其中,所述调用次数为所述PC值的调用次数。相应的,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值之前还包括:预设建立一PC数组,用于存储PC值及其被调用的调用次数。在是实际应用中,所述PC数组可以预先设定其包括的节点数,例如,1000等,其可以根据PC值的数据而调整PC数组的数据,即PC数组需要添加PC值时,可以在PC数组的最后一个节点后增加一个节点,并将PC值添加至所述节点内。
进一步,由于预设建立PC数组,那么在获取到PC值后可以先检测其是否存储于所述PC数组内。相应的,
所述将所述PC值对应的调用次数加一,并根据PC值的调用次数统计其对应函数的调用次数具体包括:
S201、在所述PC数组中查找所述PC值;
S202、若查找到所述PC值,则将所述PC数组内所述PC值对应的调用次数加一,进入步骤S204;
S203、若未查找到所述PC值,则将所述PC值添加至所述PC数组,并将所述PC值对应的调用次数设为1,进入步骤S204;
S204、根据所述PC数据确定嵌入式系统内每个函数的被调用次数。
具体地,所述在所述PC数组中查找所述PC值可以为遍历所述PC数组以确定所述PC数组是否存在所述PC值。若存在所述PC值,则直接将所述PC值对应的调用次数加一,若未存在所述PC值,则在所述PC数组的第一空白节点内添加所述PC值,并将所述PC值的调用次数设置为1,这样通过所述PC数组可以统计嵌入式系统运行过程中,各个函数的调用次数。
示例性,所述根据所述PC数据确定嵌入式系统内每个函数的调用次数具体包括:
每间隔一段时间读取所述PC数据,并利用符号表查找所述PC数组中每个PC值对应的函数名称;
将每个PC值对应的函数名称添加至所述PC数组生成函数调用次数列表,并根据所述函数调用次数列表确定嵌入式系统内每个函数的调用次数。
具体地,所述符号表为程序在编译是产生的调试信息,通过符号能够快速根据函数地址找到函数名。在本实施例中,所述符号表可以是通过对编译目标ELF文件进行反汇编,得到整个程序的汇编代码,然后对每个函数起始地址从高到底排序,得到PC值与函数名称的对应关系,例如,
其中,第一列表示PC值,第二列表示函数名称。例如,PC=0xfe000056,那么PC值在函数version_string与函数enable_addr_trans之间,那么PC应该在函数version_string里面,根据符号表查找PC值对应的函数为version_string。在实际应用中,所述根据所述函数调用次数列表确定嵌入式系统内每个函数的调用次数可以通过与嵌入式系统连接的外部终端设备进行统计,例如,所述嵌入式系统可以增加一个对外接口,并通过所述接口与外部终端设备相连接,以将所述PC数组发送至外部终端,并通过所述外部终端统计每个函数的调用次数。
本发明还提供了一种存储介质,其存储有多条指令,所述指令适于由处理器加载并执行如上任一所述的函数调用次数的统计方法。
本发明还提供了一种终端设备,如图2所示,其包括至少一个处理器(processor)20(图2中以一个处理器20为例);显示屏21;以及存储器(memory)22,还可以包括通信接口(Communications Interface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。
此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器30通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。
存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
此外,上述存储介质以及移动终端中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种函数调用次数的统计方法,其特征在于,其包括:
当执行分支指令时,触发调试中断并获取触发调试中断时的PC值;
将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数。
2.根据权利要求1所述函数调用次数的统计方法,其特征在于,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值具体为:
检测当前执行的指令是否为分支指令;
当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值。
3.根据权利要求2所述函数调用次数的统计方法,其特征在于,所述当检测到分支指令时,调用预设的中断向量以触发调试中断,并获取触发跳转中断时的PC值具体包括:
当检测到分支指令时,调用预设的中断向量以进入调试中断进程;
通过所述调试中断进程获取触发调试中断时PC寄存器的值以确定触发调试中断时的PC值。
4.根据权利要求1或2所述函数调用次数的统计方法,其特征在于,所述当执行分支指令时,触发调试中断并获取触发调试中断时的PC值之前还包括:
预设建立一PC数组,用于存储PC值及其被调用的调用次数。
5.根据权利要求4所述函数调用次数的统计方法,其特征在于,所述将所述PC值对应的调用次数加一,并根据PC值的调用次数统计其对应函数的调用次数具体包括:
在所述PC数组中查找所述PC值;
若查找到所述PC值,则将所述PC值对应的调用次数加一,并根据所述PC数组来统计每个函数的调用次数。
6.根据权利要求5所述函数调用次数的统计方法,其特征在于,所述将所述PC值对应的调用次数加一,并根据PC值的调用次数来统计函数的调用次数还包括:
若未查找到所述PC值,则将所述PC值添加至所述PC数组,并将所述PC值对应的调用次数设为1,并根据所述PC数组来统计每个函数的调用次数。
7.根据权利要求5或6所述函数调用次数的统计方法,其特征在于,所述根据所述PC数组来统计每个函数的调用次数具体包括:
每间隔一段时间读取所述PC数据,并利用符号表查找所述PC数组中每个PC值对应的函数名称;
将每个PC值对应的函数名称添加至所述PC数组生成函数调用次数列表,并根据所述函数调用次数列表确定嵌入式系统内每个函数的调用次数。
8.一种存储介质,其特征在于,其存储有多条指令,所述指令适于由处理器加载并执行如权利要求1-7任一所述的函数调用次数的统计方法。
9. 一种终端设备,其特征在于,其包括:
处理器,适于实现各指令;以及
存储设备,适于存储多条指令,所述指令适于由处理器加载并执行如权利要求1-8任一所述的函数调用次数的统计方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710686003.9A CN107544896B (zh) | 2017-08-11 | 2017-08-11 | 一种函数调用次数的统计方法、存储介质及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710686003.9A CN107544896B (zh) | 2017-08-11 | 2017-08-11 | 一种函数调用次数的统计方法、存储介质及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107544896A true CN107544896A (zh) | 2018-01-05 |
CN107544896B CN107544896B (zh) | 2021-04-20 |
Family
ID=60970516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710686003.9A Active CN107544896B (zh) | 2017-08-11 | 2017-08-11 | 一种函数调用次数的统计方法、存储介质及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107544896B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110659032A (zh) * | 2019-09-24 | 2020-01-07 | 网易(杭州)网络有限公司 | 游戏应用的指令执行方法、装置、终端设备和存储介质 |
CN113507487A (zh) * | 2021-09-06 | 2021-10-15 | 蜂巢能源科技有限公司 | Can通信安全的检测方法、装置、电子设备及车辆 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1614570A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 对特定指令类型的指令执行和数据访问计数的方法和设备 |
CN101344865A (zh) * | 2008-08-15 | 2009-01-14 | 中兴通讯股份有限公司 | 一种cpu占用率测量方法及装置 |
CN101763248A (zh) * | 2008-12-25 | 2010-06-30 | 世意法(北京)半导体研发有限责任公司 | 用于多模式分支预测器的系统和方法 |
CN103559123A (zh) * | 2013-10-24 | 2014-02-05 | 烽火通信科技股份有限公司 | 基于VxWorks操作系统的函数调用栈分析方法及装置 |
-
2017
- 2017-08-11 CN CN201710686003.9A patent/CN107544896B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1614570A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 对特定指令类型的指令执行和数据访问计数的方法和设备 |
CN101344865A (zh) * | 2008-08-15 | 2009-01-14 | 中兴通讯股份有限公司 | 一种cpu占用率测量方法及装置 |
CN101763248A (zh) * | 2008-12-25 | 2010-06-30 | 世意法(北京)半导体研发有限责任公司 | 用于多模式分支预测器的系统和方法 |
CN103559123A (zh) * | 2013-10-24 | 2014-02-05 | 烽火通信科技股份有限公司 | 基于VxWorks操作系统的函数调用栈分析方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110659032A (zh) * | 2019-09-24 | 2020-01-07 | 网易(杭州)网络有限公司 | 游戏应用的指令执行方法、装置、终端设备和存储介质 |
CN110659032B (zh) * | 2019-09-24 | 2023-08-22 | 网易(杭州)网络有限公司 | 游戏应用的指令执行方法、装置、终端设备和存储介质 |
CN113507487A (zh) * | 2021-09-06 | 2021-10-15 | 蜂巢能源科技有限公司 | Can通信安全的检测方法、装置、电子设备及车辆 |
CN113507487B (zh) * | 2021-09-06 | 2021-12-24 | 蜂巢能源科技有限公司 | Can通信安全的检测方法、装置、电子设备及车辆 |
Also Published As
Publication number | Publication date |
---|---|
CN107544896B (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101840905B1 (ko) | 상태 기계 격자에서의 카운터 동작 | |
EP2868045B1 (en) | A method of and network server for detecting data patterns in an input data stream | |
KR101672067B1 (ko) | 패턴 인식 프로세서의 버스 | |
KR101648235B1 (ko) | 정합-데이터 보고 모듈을 갖는 패턴 인식 프로세서 | |
CN101964036B (zh) | 漏洞检测方法及装置 | |
CN109062794A (zh) | 一种软件测评结果的确定方法、装置及电子设备 | |
US8543528B2 (en) | Exploitation of transition rule sharing based on short state tags to improve the storage efficiency | |
CN111124479B (zh) | 配置文件的解析方法、系统及电子设备 | |
CN111124926A (zh) | 模糊测试方法、装置、电子设备及存储介质 | |
CN103853532A (zh) | 用于函数调用的方法和装置 | |
CN107544896A (zh) | 一种函数调用次数的统计方法、存储介质及终端设备 | |
US20190171773A1 (en) | Multi-index method and apparatus, cloud system and computer-readable storage medium | |
CN108427883A (zh) | 网页挖矿脚本的检测方法及装置 | |
KR102347777B1 (ko) | Nop 슬레드 탐지 방법 및 그 장치 | |
CN101533370B (zh) | 一种内存异常访问定位方法及装置 | |
CN110795464A (zh) | 对象标记数据的字段校验方法、装置、终端及存储介质 | |
US10204177B2 (en) | Matching an ordered set of strings containing wild cards | |
CN110489032A (zh) | 用于电子书的词典查询方法及电子设备 | |
CN111796731B (zh) | 一种自动排列图标的方法与设备 | |
CN105843740B (zh) | 代码编译结果的检测方法和装置 | |
CN114331167B (zh) | 一种冠军挑战者策略的管理方法、系统、介质和设备 | |
CN103605479B (zh) | 数据文件写入方法及系统、数据文件读取方法及系统 | |
CN114896469A (zh) | 一种正则表达式引擎的构造方法、装置、存储介质及设备 | |
CN112579839B (zh) | 大规模特征的多模匹配方法、装置及存储介质 | |
CN113868137A (zh) | 埋点数据的处理方法、装置、系统和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |