CN115905012A - 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 - Google Patents
嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115905012A CN115905012A CN202211665027.3A CN202211665027A CN115905012A CN 115905012 A CN115905012 A CN 115905012A CN 202211665027 A CN202211665027 A CN 202211665027A CN 115905012 A CN115905012 A CN 115905012A
- Authority
- CN
- China
- Prior art keywords
- module
- virtual machine
- function
- simulator
- cache
- 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.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明揭示了一种嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质,所述调试分析系统包括虚拟机模块、缓存模拟器、总线模拟器、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块、调试服务器模块及脚本解释执行模块;所述脚本解释执行模块能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。本发明提出的嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质,可减少嵌入式系统软件调试的工作量。
Description
技术领域
本发明属于电子信息技术领域,涉及一种调试分析系统,尤其涉及一种嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质。
背景技术
随着物联网生态迅速发展,越来越多的功能被集成在单颗MCU中。由于嵌入式芯片的独立性,加上资源比较紧张,调试过程不如在Linux/Unix/Windows平台上方便;此外,由于嵌入式软件规模越来越大,且开发人员水平差异大等原因,使得在嵌入式平台上的软件调试变得非常困难。
在现有的嵌入式调试手段中,大量研发人员还是通过加打印日志来分析定位问题,耗费时间且效率低下;或者直接通过JTAG进行片上调试,但是芯片资源有限,较难实现运行时对系统完整的跟踪调测。
有鉴于此,如今迫切需要设计一种新的系统调试分析方式,以便克服现有系统调试分析方式存在的上述至少部分缺陷。
发明内容
本发明提供一种嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质,可减少嵌入式系统软件调试的工作量。
为解决上述技术问题,根据本发明的一个方面,采用如下技术方案:
一种嵌入式系统软件开发场景下的调试分析系统,所述调试分析系统包括:虚拟机模块、缓存模拟器、总线模拟器、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块、调试服务器模块及脚本解释执行模块;
所述脚本解释执行模块分别连接所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令;
所述虚拟机模块分别连接所述总线模拟器、内存合法性分析器、性能采样模块、片上仿真模块、调试服务器模块,用以模拟CPU执行程序指令;
所述缓存模拟器分别连接所述内存合法性分析器、函数动态跟踪模块、性能采样模块,用以模拟缓存命中、替换策略,统计缺失率;
所述总线模拟器分别连接所述内存合法性分析器、函数动态跟踪模块,用以模拟CPU总线访问;
所述内存合法性分析器用以检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
所述函数动态跟踪模块用以监听设定的函数调用;
所述性能采样模块用以获取表征性能的参数;
所述片上仿真模块用以连接物理芯片,和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
所述调试服务器模块连接调试器,用以接收和响应调试器的控制请求。
作为本发明的一种实施方式,所述缓存模拟器包括Cache模拟器或/和TLB模拟器;
所述Cache模拟器用以模拟硬件高速缓存命中、替换策略,用于统计Cache缺失率;
所述TLB模拟器用以模拟硬件页表缓存命中、替换策略,用于统计TLB缺失率。
作为本发明的一种实施方式,所述性能采样模块用以收集Cache、TLB、函数调用事件,或者以某一固定频率采样虚拟机模块上的程序状态,统计出Cache、TLB未命中次数、函数执行时间占比、函数调用栈以及调用参数,分析软件的性能情况;
所述片上仿真模块用以在设定调试场景下连接物理芯片,与虚拟机模块配合,实现在物理芯片上使能无限个硬件断点;在flash上打断点和软件断点类似,直接会把Flash的断点处的代码替换成断点指令,将原指令记录在工具中;当物理CPU执行到Flash的断点指令时,会产生断点异常,工具会捕捉该异常,此时虚拟机模块会接管物理处理器的上下文状态,执行断点位置的原始指令,将指令结果写回到物理处理器;或者将芯片的某个真实外设挂载到总线模拟器中,达到虚拟机模块操作真实外设的目的。
作为本发明的一种实施方式,所述虚拟机模块的内部包含输入部分、运算器、控制器、输出部分和通用寄存器;
RAM、ROM、虚拟中断控制器注册在总线模拟器上,总线模拟器负责将CPU的访问分发到不同组件;
所述函数动态跟踪模块用以替换函数入口的指令能中断虚拟机模块的正常运行,使虚拟机模块外部能感知,从而控制函数的真正执行逻辑;所述函数动态跟踪模块用于性能分析和对底层设备的模拟。
根据本发明的另一个方面,采用如下技术方案:一种嵌入式系统软件开发场景下的调试分析方法,所述调试分析方法包括:
虚拟机模块模拟CPU执行程序指令;
缓存模拟器模拟缓存命中、替换策略,统计缺失率;
总线模拟器模拟CPU总线访问;
内存合法性分析器检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
函数动态跟踪模块监听设定的函数调用;
性能采样模块获取表征性能的参数;
片上仿真模块和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
调试服务器模块接收和响应调试器的控制请求;
脚本解释执行模块分别与虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器通信,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。
作为本发明的一种实施方式,所述缓存模拟器包括Cache模拟器或/和TLB模拟器;
所述Cache模拟器模拟硬件高速缓存命中、替换策略,用于统计Cache缺失率;
所述TLB模拟器模拟硬件页表缓存命中、替换策略,用于统计TLB缺失率。
作为本发明的一种实施方式,所述性能采样模块收集Cache、TLB、函数调用事件,或者以某一固定频率采样虚拟机模块上的程序状态,统计出Cache、TLB未命中次数、函数执行时间占比、函数调用栈以及调用参数,分析软件的性能情况;
所述片上仿真模块在设定调试场景下连接物理芯片,与虚拟机模块配合,实现在物理芯片上使能无限个硬件断点;在flash上打断点和软件断点类似,直接会把Flash的断点处的代码替换成断点指令,将原指令记录在工具中;当物理CPU执行到Flash的断点指令时,会产生断点异常,工具会捕捉该异常,此时虚拟机模块会接管物理处理器的上下文状态,执行断点位置的原始指令,将指令结果写回到物理处理器;或者将芯片的某个真实外设挂载到总线模拟器中,达到虚拟机模块操作真实外设的目的。
作为本发明的一种实施方式,所述函数动态跟踪模块替换函数入口的指令能中断虚拟机模块的正常运行,使虚拟机模块外部能感知,从而控制函数的真正执行逻辑;所述函数动态跟踪模块用于性能分析和对底层设备的模拟。
根据本发明的又一个方面,采用如下技术方案:一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
根据本发明的又一个方面,采用如下技术方案:一种存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述方法的步骤。
本发明的有益效果在于:本发明提出的嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质,可减少嵌入式系统软件调试的工作量。
本发明可以对嵌入式软件开发者屏蔽底层硬件的功能,使开发人员不通过硬件便可以调测其业务功能;通过本发明提供的调试分析系统带有的内存合法性分析器、函数动态跟踪模块、脚本解释执行模块等功能,在产品研发阶段可以快速定位并解决软件问题;在最终与硬件联调时,可以减少绝大部分软件调试的工作量。
附图说明
图1为现有嵌入式软件分析调试系统的组成示意图。
图2为本发明一实施例中分析调试系统的组成示意图。
图3为本发明一实施例中电子设备的组成示意图。
具体实施方式
下面结合附图详细说明本发明的优选实施例。
为了进一步理解本发明,下面结合实施例对本发明优选实施方案进行描述,但是应当理解,这些描述只是为进一步说明本发明的特征和优点,而不是对本发明权利要求的限制。
该部分的描述只针对几个典型的实施例,本发明并不仅局限于实施例描述的范围。相同或相近的现有技术手段与实施例中的一些技术特征进行相互替换也在本发明描述和保护的范围内。
说明书中各个实施例中的步骤的表述只是为了方便说明,本申请的实现方式不受步骤实现的顺序限制。
说明书中的“连接”既包含直接连接,也包含间接连接。
本发明揭示了一种嵌入式系统软件开发场景下的调试分析系统,图2为本发明一实施例中分析调试系统的组成示意图;请参阅图2,所述调试分析系统包括:虚拟机模块1、缓存模拟器2、总线模拟器3、内存合法性分析器4、函数动态跟踪模块5、性能采样模块6、片上仿真模块7、调试服务器模块8及脚本解释执行模块9。
所述脚本解释执行模块9分别连接所述虚拟机模块1、内存合法性分析器4、函数动态跟踪模块5、性能采样模块6、片上仿真模块7和调试服务器8,能向所述虚拟机模块1、内存合法性分析器4、函数动态跟踪模块5、性能采样模块6、片上仿真模块7和调试服务器8发送控制命令。
所述虚拟机模块1分别连接所述总线模拟器3、内存合法性分析器4、性能采样模块6、片上仿真模块7、调试服务器模块8,用以模拟CPU执行程序指令。在本发明的一实施例中,所述虚拟机模块1的内部包含输入部分、运算器、控制器、输出部分和通用寄存器。
所述缓存模拟器2分别连接所述内存合法性分析器4、函数动态跟踪模块5、性能采样模块6,用以模拟缓存命中、替换策略,统计缺失率。在本发明的一实施例中,所述缓存模拟器2包括Cache模拟器或/和TLB模拟器;所述Cache模拟器用以模拟硬件高速缓存命中、替换策略,用于统计Cache缺失率;所述TLB模拟器用以模拟硬件页表缓存命中、替换策略,用于统计TLB缺失率。
所述总线模拟器3分别连接所述内存合法性分析器4、函数动态跟踪模块5,用以模拟CPU总线访问。RAM、ROM、虚拟中断控制器注册在总线模拟器上,总线模拟器负责将CPU的访问分发到不同组件。
所述内存合法性分析器4用以检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整。比如malloc的一段内存后,该内存是合法的,free之后该内存就不合法;该部分可以动态分析堆和栈。
所述函数动态跟踪模块5用以监听设定的函数调用。在本发明的一种使用场景中,函数动态跟踪模块5的原理是替换函数入口的指令为特殊指令,该指令可以中断虚拟机模块的正常运行,使虚拟机外部可以感知,从而可以控制函数的真正执行逻辑,该模块常用于性能分析和对底层设备的模拟。
所述性能采样模块6用以获取表征性能的参数。在本发明的一实施例中,所述性能采样模块6用以收集Cache、TLB、函数调用事件,或者以某一固定频率采样虚拟机模块上的程序状态,统计出Cache、TLB未命中次数、函数执行时间占比、函数调用栈以及调用参数,分析软件的性能情况。
所述片上仿真模块7用以连接物理芯片11,和虚拟机模块配合,实现在物理芯片11上使能设定个数的硬件断点。在一些特殊调试场景下,该模块通过JTAG连接物理芯片,和虚拟机一起可以实现在芯片上使能无限个硬件断点,具体做法是在flash上打断点和软件断点类似,直接会把Flash的断点处的代码替换成断点指令,将原指令记录在工具中。当物理CPU执行到Flash的断点指令时,会产生断点异常,工具会捕捉该异常,因为工具里有虚拟处理器,此时虚拟处理器会接管物理处理器的上下文状态,执行断点位置的原始指令,将指令结果写回到物理处理器。也可以将芯片的某个真实外设挂载到虚拟总线中,达到虚拟机可以操作真实外设的目的。
所述调试服务器模块8连接调试器10,用以接收和响应调试器10的控制请求。所述调试器10可以是常见第三方调试器(如GDB、LLDB)。
本发明还揭示一种嵌入式系统软件开发场景下的调试分析方法,所述调试分析方法包括:
虚拟机模块模拟CPU执行程序指令;
缓存模拟器模拟缓存命中、替换策略,统计缺失率;
总线模拟器模拟CPU总线访问;
内存合法性分析器检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
函数动态跟踪模块监听设定的函数调用;
性能采样模块获取表征性能的参数;
片上仿真模块和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
调试服务器模块接收和响应调试器的控制请求;
脚本解释执行模块分别与虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器通信,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。
在本发明的一种使用场景下,嵌入式系统软件开发场景下的调试分析方法的具体工作流程包括:脚本解释执行模块首先运行,解析传入参数,包括需要调试的ELF文件,函数hook配置脚本文件等。前者用来初始化虚拟CPU模块、虚拟总线模块、TLB/Cache模块等,后者用来初始化函数动态跟踪模块,内存合法性分析模块。
当初始化完成之后,虚拟CPU会从ELF文件里描述的入口点地址取指令运行。指令包含算数指令和内存访问指令。所有的内存访问都会经过内存访问合法性检查模块。起初所有的内存区域都标记为“非法”,然后Hook住全局变量和Heap初始化的函数,在这两个函数会对“非法”的内存空间进行初始化,初始化完成后,相应的内存地址则标记为“合法”,后续CPU访问则可以正常进行。
该调试分析系统会Hook住Malloc和Free函数,在Malloc返回前,会将分配的内存地址空间标记为“合法”;在Free函数返回前,会将释放的内存地址重新标记为“非法”,这样就可以保证堆内存区域的访问得到有效的检查。同样压栈和出栈也可以使用类似的方法进行合法性检查。
当使能性能采样模块的时候,Cache/TLB的Miss率可以得到统计,同时也可以通过脚本解释执行模块控制跟踪哪些函数的调用情况,时间消耗情况等。性能采样模块还可以以一个固定频率中断虚拟CPU的运行,比如使用997Hz频率打断虚拟CPU,记录当前虚拟CPU的PC寄存器内容,和栈的调用关系。最终可以统计出这段时间内采样点落在某个函数里的次数,进而可以反映出该函数占用总采样时间的比例。
开发者可以通过脚本解释执行环境,灵活的控制所有组件。比如HookELF的函数到脚本的某个函数中。假如开发者Hook了函数A,当虚拟CPU执行到函数A的时候,实际会执行脚本里的A函数的Hook,A的真正代码由脚本来执行,并将结果返回到虚拟CPU中。对于虚拟CPU来说,A函数正常执行且返回了。但是对于函数A来说,它真正的行为是由脚本里的Hook指定的。
当使能调试服务器组件时,外部调试器(如GDB、LLDG等)可以连接到本调试分析系统中。这样开发者可以通过GDB来调试程序代码,实现单步、打印调用栈、打断点、观察点等操作。
用户可以在项目前期开发调试阶段,直接使用芯片原厂SDK增加客户定制业务代码编译生成的ELF文件加载到工具创建沙箱环境中,由虚拟CPU直接执行。沙箱在运行代码之前会hook住SDK硬件相关的函数调用,通过软件模拟功能而不是模拟硬件的行为。
该工具还支持用户自定义脚本,通过脚本,客户可以随意hook他想要的函数,可以跟踪函数调用时的调用栈、函数执行时间统计、注入执行任意代码等,提供一个非常灵活可扩展的接口满足客户灵活的调试需求。
在沙箱环境中运行的程序,和在物理芯片上运行的程序完全一致,唯一的区别是工具在加载ELF中的程序指令到沙箱环境中的过程中,会将涉及到与底层硬件交互的硬件驱动函数通过动态跟踪模块Hook到脚本执行环境中。当应用代码调用到被Hook的函数时,由脚本执行环境接管并且模拟硬件功能并返回有意义的结果。此方式可以对应用层屏蔽底层的差异。比如在Wi-Fi芯片中,应用层调用Socket连接网络,Socket接口会通过TCP/IP协议栈与802.11协议栈进行协同实现数据包的收发。而在沙箱环境中,没有802.11协议栈和底层硬件,可以通过HookSocket相关接口,直接调用运行该工具的操作系统的Socket接口完成TCPIP的数据交互。
在嵌入式调试过程中,经常遇到内存相关的问题,比如内存泄漏、内存访问越界、使用已释放的内存,栈溢出等。该调试分析系统可以对每一次内存访问操作进行检查,以验证其访问的合法性。通过函数动态跟踪模块,可以Hook住malloc和free函数,当malloc分配内存成功后,将分配出来的内存块标记为“合法”,虚拟CPU后续对该区域的访问可以正常进行。当一块内存通过free接口释放之后,相应内存区域则标记为“非法”,虚拟CPU的访问则会报告异常,即可定位出堆内存的非法访问、访问越界、使用已释放的内存空间等问题。栈上的区域可以通过监控虚拟CPU的栈顶寄存器(SP)寄存器,当一个函数压栈时,可以检查栈顶寄存器(SP)寄存器是否越过了当前线程的最大栈地址,并且标记此栈帧空间为“合法”,当函数返回后,则将栈顶寄存器(SP)弹出的区域标记为“非法”,后续如果引用了非法的局部变量则可以检查出来。
性能采样模块通过函数动态跟踪模块,也可以实现对指定函数的动态跟踪和采样,当开发者想要查看某个函数何时被调用,被谁调用时,可以对该函数进行动态跟踪,具体是在函数的首地址设置为“非法”,在虚拟CPU从该地址取指令的时候,就可以触发相应的事件,在事件处理函数中可以获取函数调用栈,函数调用线程等。如果在事件处理函数中修改函数返回地址为一个非法地址值,在函数返回时同样可以触发一次事件,通过对比两次事件的时间即可知道函数的运行时间。
性能采样模块也可以通过固定频率中断虚拟CPU的运行,每一次中断就叫做一个采样点。在虚拟CPU被中断的时候,记录当前CPU运行的指令计数器(PC)、返回地址寄存器(RA)、栈顶寄存器(SP)以及当前栈中的函数调用链。当停止采样的时候,把记录到的函数调用链进行合并整理,生成所采到的函数运行时间在总采样时间的占比,既可以直观地反映出这段时间的程序运行情况。
调试服务器模块用来接收调试器的控制请求,比如GDB、LLDB等常见的调试器。调试器可以工作在CS模式,该调试分析系统作为Server,调试器作为Client。该调试分析系统运行时可以响应调试器的连接请求,连接成功后,调试器可以控制虚拟CPU的运行、暂停、单步执行、打印变量、读写内存、打印函数调用栈、设置断点和观察点等操作。
片上调试功能可以通过仿真器提供的JTAG物理接口,与物理芯片相连。JTAG可以为虚拟CPU提供真实硬件访问的能力。当虚拟CPU和物理CPU跑相同的程序代码时,可将本调试分析系统进入片上调试(On-Chipdebug)模式。GDB调试器可以与本调试系统相连,本调试系统再与物理CPU相连,控制物理CPU的运行、暂停、单步执行、打印变量、读写内存、打印函数调用栈、设置断点和观察点等操作。因为有虚拟CPU的存在,可以在物理芯片上实现无限多个断点。具体操作是本调试分析系统接收到GDB调试器的打断点指令时,直接通过JTAG控制CPU将断点地址对应的Flash代码进行修改,将地址对应的函数指令替换为“断点指令”。当物理CPU执行到该断点指令时,该调试分析系统通过JTAG获得断点指令的通用寄存器上下文,加载到虚拟CPU中,由虚拟CPU执行该断点地址真正的指令,并将指令结果写回到物理CPU的相应寄存器中,继续恢复程序的运行。
当虚拟CPU和物理CPU运行不同的代码时,可将本调试分析系统进入虚拟CPU模式,通过JTAG可以将一些辅助指令下载到物理CPU中,然后虚拟CPU通过JTAG和物理CPU的辅助程序交互,实现虚拟CPU对物理外设的真实访问。辅助程序可以将中断等信息重定向到虚拟CPU中。
脚本执行环境为开发者提供高级配置接口,通过Lua脚本语言,开发者可以灵活控制本调试分析系统的每一个组件,比如hook随意一个函数,执行自定义代码;或将Host系统的设备对接到应用程序中,比如嵌入式ELF程序中会调用芯片SDK的蓝牙操作接口,在虚拟环境中可以将LinuxHost的蓝牙HCI设备对接到SDK的HCI操作接口上,实现真实的蓝牙行为。
本发明还揭示一种电子设备,图3为本发明一实施例中电子设备的组成示意图;请参阅图3,在硬件层面所述电子设备包括存储器、处理器及至少一网络接口;所述处理器可以为微处理器,所述存储器可以包括内存,如可以包括随机存取存储器(RandomAccessMemory,RAM),也可以包括非易失性存储器(non-volatilememory)等。当然,所述电子设备还可以根据需要设置其他硬件。
所述处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(工业标准体系结构)总线、PCI(外设部件互连标准)总线或EISA(扩展工业标准结构)总线等;所述总线可以包括地址总线、数据总线、控制总线等。所述存储器用于存放程序(可包括操作系统程序及应用程序);程序可以包括程序代码,所述程序代码可以包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
在一实施例中,所述处理器可以从非易失性存储器中读取对应的程序到内存中,而后运行;处理器能执行存储器所存放的程序,并具体用于执行以下操作(可参阅图2):
虚拟机模块模拟CPU执行程序指令;
缓存模拟器模拟缓存命中、替换策略,统计缺失率;
总线模拟器模拟CPU总线访问;
内存合法性分析器检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
函数动态跟踪模块监听设定的函数调用;
性能采样模块获取表征性能的参数;
片上仿真模块和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
调试服务器模块接收和响应调试器的控制请求;
脚本解释执行模块分别与虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器通信,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。
本发明进一步揭示一种存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现本发明方法的如下步骤(可参阅图2):
虚拟机模块模拟CPU执行程序指令;
缓存模拟器模拟缓存命中、替换策略,统计缺失率;
总线模拟器模拟CPU总线访问;
内存合法性分析器检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
函数动态跟踪模块监听设定的函数调用;
性能采样模块获取表征性能的参数;
片上仿真模块和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
调试服务器模块接收和响应调试器的控制请求;
脚本解释执行模块分别与虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器通信,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。
综上所述,本发明提出的嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质,可减少嵌入式系统软件调试的工作量。
本发明可以对嵌入式软件开发者屏蔽底层硬件的功能,使开发人员不通过硬件便可以调测其业务功能;通过本发明提供的调试分析系统带有的内存合法性分析器、函数动态跟踪模块、脚本解释执行模块等功能,在产品研发阶段可以快速定位并解决软件问题;在最终与硬件联调时,可以减少绝大部分软件调试的工作量。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施;例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中;例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现;例如,作为与处理器配合从而执行各个步骤或功能的电路。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
这里本发明的描述和应用是说明性的,并非想将本发明的范围限制在上述实施例中。实施例中所涉及的效果或优点可因多种因素干扰而可能不能在实施例中体现,对于效果或优点的描述不用于对实施例进行限制。这里所披露的实施例的变形和改变是可能的,对于那些本领域的普通技术人员来说实施例的替换和等效的各种部件是公知的。本领域技术人员应该清楚的是,在不脱离本发明的精神或本质特征的情况下,本发明可以以其它形式、结构、布置、比例,以及用其它组件、材料和部件来实现。在不脱离本发明范围和精神的情况下,可以对这里所披露的实施例进行其它变形和改变。
Claims (10)
1.一种嵌入式系统软件开发场景下的调试分析系统,其特征在于,所述调试分析系统包括:虚拟机模块、缓存模拟器、总线模拟器、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块、调试服务器模块及脚本解释执行模块;
所述脚本解释执行模块分别连接所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令;
所述虚拟机模块分别连接所述总线模拟器、内存合法性分析器、性能采样模块、片上仿真模块、调试服务器模块,用以模拟CPU执行程序指令;
所述缓存模拟器分别连接所述内存合法性分析器、函数动态跟踪模块、性能采样模块,用以模拟缓存命中、替换策略,统计缺失率;
所述总线模拟器分别连接所述内存合法性分析器、函数动态跟踪模块,用以模拟CPU总线访问;
所述内存合法性分析器用以检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
所述函数动态跟踪模块用以监听设定的函数调用;
所述性能采样模块用以获取表征性能的参数;
所述片上仿真模块用以连接物理芯片,和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
所述调试服务器模块连接调试器,用以接收和响应调试器的控制请求。
2.根据权利要求1所述的调试分析系统,其特征在于:
所述缓存模拟器包括Cache模拟器或/和TLB模拟器;
所述Cache模拟器用以模拟硬件高速缓存命中、替换策略,用于统计Cache缺失率;所述TLB模拟器用以模拟硬件页表缓存命中、替换策略,用于统计TLB缺失率。
3.根据权利要求1所述的调试分析系统,其特征在于:
所述性能采样模块用以收集Cache、TLB、函数调用事件,或者以某一固定频率采样虚拟机模块上的程序状态,统计出Cache、TLB未命中次数、函数执行时间占比、函数调用栈以及调用参数,分析软件的性能情况;
所述片上仿真模块用以在设定调试场景下连接物理芯片,与虚拟机模块配合,实现在物理芯片上使能无限个硬件断点;在flash上打断点和软件断点类似,直接会把Flash的断点处的代码替换成断点指令,将原指令记录在工具中;当物理CPU执行到Flash的断点指令时,会产生断点异常,工具会捕捉该异常,此时虚拟机模块会接管物理处理器的上下文状态,执行断点位置的原始指令,将指令结果写回到物理处理器;或者将芯片的某个真实外设挂载到总线模拟器中,达到虚拟机模块操作真实外设的目的。
4.根据权利要求1所述的调试分析系统,其特征在于:
所述虚拟机模块的内部包含输入部分、运算器、控制器、输出部分和通用寄存器;
RAM、ROM、虚拟中断控制器注册在总线模拟器上,总线模拟器负责将CPU的访问分发到不同组件;
所述函数动态跟踪模块用以替换函数入口的指令能中断虚拟机模块的正常运行,使虚拟机模块外部能感知,从而控制函数的真正执行逻辑;所述函数动态跟踪模块用于性能分析和对底层设备的模拟。
5.一种嵌入式系统软件开发场景下的调试分析方法,其特征在于,所述调试分析方法包括:
虚拟机模块模拟CPU执行程序指令;
缓存模拟器模拟缓存命中、替换策略,统计缺失率;
总线模拟器模拟CPU总线访问;
内存合法性分析器检查CPU总线访问的合法性,内存的合法性在程序运行时动态调整;
函数动态跟踪模块监听设定的函数调用;
性能采样模块获取表征性能的参数;
片上仿真模块和虚拟机模块配合,实现在物理芯片上使能设定个数的硬件断点;
调试服务器模块接收和响应调试器的控制请求;
脚本解释执行模块分别与虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器通信,能向所述虚拟机模块、内存合法性分析器、函数动态跟踪模块、性能采样模块、片上仿真模块和调试服务器发送控制命令。
6.根据权利要求5所述的调试分析方法,其特征在于:
所述缓存模拟器包括Cache模拟器或/和TLB模拟器;
所述Cache模拟器模拟硬件高速缓存命中、替换策略,用于统计Cache缺失率;
所述TLB模拟器模拟硬件页表缓存命中、替换策略,用于统计TLB缺失率。
7.根据权利要求6所述的调试分析方法,其特征在于:
所述性能采样模块收集Cache、TLB、函数调用事件,或者以某一固定频率采样虚拟机模块上的程序状态,统计出Cache、TLB未命中次数、函数执行时间占比、函数调用栈以及调用参数,分析软件的性能情况;
所述片上仿真模块在设定调试场景下连接物理芯片,与虚拟机模块配合,实现在物理芯片上使能无限个硬件断点;在flash上打断点和软件断点类似,直接会把Flash的断点处的代码替换成断点指令,将原指令记录在工具中;当物理CPU执行到Flash的断点指令时,会产生断点异常,工具会捕捉该异常,此时虚拟机模块会接管物理处理器的上下文状态,执行断点位置的原始指令,将指令结果写回到物理处理器;或者将芯片的某个真实外设挂载到总线模拟器中,达到虚拟机模块操作真实外设的目的。
8.根据权利要求5所述的调试分析方法,其特征在于:
所述函数动态跟踪模块替换函数入口的指令能中断虚拟机模块的正常运行,使虚拟机模块外部能感知,从而控制函数的真正执行逻辑;所述函数动态跟踪模块用于性能分析和对底层设备的模拟。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求5至8任一项所述方法的步骤。
10.一种存储介质,其上存储有计算机程序指令,其特征在于,该计算机程序指令被处理器执行时实现权利要求5至8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211665027.3A CN115905012A (zh) | 2022-12-23 | 2022-12-23 | 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211665027.3A CN115905012A (zh) | 2022-12-23 | 2022-12-23 | 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115905012A true CN115905012A (zh) | 2023-04-04 |
Family
ID=86491301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211665027.3A Pending CN115905012A (zh) | 2022-12-23 | 2022-12-23 | 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115905012A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093353A (zh) * | 2023-10-17 | 2023-11-21 | 北京开源芯片研究院 | 一种中断控制方法、装置、电子设备及可读存储介质 |
-
2022
- 2022-12-23 CN CN202211665027.3A patent/CN115905012A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093353A (zh) * | 2023-10-17 | 2023-11-21 | 北京开源芯片研究院 | 一种中断控制方法、装置、电子设备及可读存储介质 |
CN117093353B (zh) * | 2023-10-17 | 2024-02-02 | 北京开源芯片研究院 | 一种中断控制方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10795673B2 (en) | Diagnosing production applications | |
KR101019210B1 (ko) | 이뮬레이트를 활용한 임베디드 소프트웨어 테스트 장치 및그 방법 | |
Chow et al. | Decoupling dynamic program analysis from execution in virtual environments | |
Carreira et al. | Xception: A technique for the experimental evaluation of dependability in modern computers | |
Edelstein et al. | Framework for testing multi‐threaded Java programs | |
EP0567722B1 (en) | System for analyzing and debugging embedded software through dynamic and interactive use of code markers | |
KR101019209B1 (ko) | 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법 | |
US20090037887A1 (en) | Compiler-inserted predicated tracing | |
Maier et al. | Unicorefuzz: On the viability of emulation for kernelspace fuzzing | |
US20090172664A1 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
US20120036501A1 (en) | Method and System for Capturing System and User Events Using Hardware Trace Devices | |
Jeong et al. | Fifa: A kernel-level fault injection framework for arm-based embedded linux system | |
Maier et al. | Bsod: Binary-only scalable fuzzing of device drivers | |
CN115905012A (zh) | 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质 | |
Lauwaerts et al. | Event-Based Out-of-Place Debugging | |
Börsig et al. | Fuzzing framework for ESP32 microcontrollers | |
Seo et al. | Automating embedded software testing on an emulated target board | |
O'Callahan et al. | Lightweight user-space record and replay | |
Ho et al. | On the design of a pervasive debugger | |
KR100428712B1 (ko) | 멀티 태스크 프로그램의 논스톱 디버깅을 위한트레이스포인트 설정 방법 | |
Artho et al. | Enforcer–efficient failure injection | |
CN118245290B (zh) | 快速检测操作系统内存不可恢复错误的系统及方法 | |
Senthilkumaran et al. | Insight: A framework for application diagnosis using virtual machine record and replay | |
JPH1165885A (ja) | ソフトウェアディバッグ装置及びソフトウェアディバッグ方法 | |
Gentleman et al. | Hardware assisted high level debugging: preliminary draft |
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 |