首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 嵌入式系统软件中概率复现问题的调试方法、系统及介质

嵌入式系统软件中概率复现问题的调试方法、系统及介质

阅读:24发布:2022-10-01

专利汇可以提供嵌入式系统软件中概率复现问题的调试方法、系统及介质专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种 嵌入式系统 软件 中概率复现问题的调试方法、系统及介质,包括:观察点插入步骤:在 操作系统 内各个事件的发生点和结束点插入观察点,令观察点采集数据;等待问题复现步骤:重新执行软件,等待问题复现;观察点增加步骤:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并进入问题范围缩小步骤继续执行;否则,则分析下一事件 位置 的观察点数据。本发明可以以非入侵的方式对待调试代码进行调试。不会破坏待调试代码的完整性。,下面是嵌入式系统软件中概率复现问题的调试方法、系统及介质专利的具体信息内容。

1.一种嵌入式系统软件中概率复现问题的调试方法,其特征在于,包括:
观察点插入步骤:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
等待问题复现步骤:重新执行软件,等待问题复现;
观察点增加步骤:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并进入问题范围缩小步骤继续执行;否则,则分析下一事件位置的观察点数据;
问题范围缩小步骤:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,返回观察点增加步骤继续执行;如果可以缩小问题范围,则获得缩小范围后的两个观察点,进入复现观察步骤继续执行;
复现观察步骤:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,返回观察点增加步骤继续执行;若可以观察到问题稳定复现,进入错误定步骤;
错误锁定步骤:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则返回观察点增加步骤继续执行。
2.根据权利要求1所述的嵌入式系统软件中概率复现问题的调试方法,其特征在于,所述观察点插入步骤:
所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
所述观察点采集的数据存储至空闲内存或闪存区域。
3.根据权利要求2所述的嵌入式系统软件中概率复现问题的调试方法,其特征在于,所述观察点增加步骤:
读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并进入问题范围缩小步骤继续执行;否则,则继续分析下一个事件位置的观察点数据。
所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
4.根据权利要求3所述的嵌入式系统软件中概率复现问题的调试方法,其特征在于,所述问题范围缩小步骤:
所述根据观察点采集的数据判断能否缩小问题范围:
若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,返回观察点增加步骤继续执行。
5.根据权利要求4所述的嵌入式系统软件中概率复现问题的调试方法,其特征在于,所述复现观察步骤:
重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,进入错误锁定步骤继续执行;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,返回观察点增加步骤继续执行。
6.一种嵌入式系统软件中概率复现问题的调试系统,其特征在于,包括
观察点插入模:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
等待问题复现模块:重新执行软件,等待问题复现;
观察点增加模块:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并调用问题范围缩小模块;否则,则分析下一事件位置的观察点数据;
问题范围缩小模块:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,调用观察点增加模块;如果可以缩小问题范围,则获得缩小范围后的两个观察点,调用复现观察模块;
复现观察模块:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,调用观察点增加模块继续执行;若可以观察到问题稳定复现,调用错误锁定模块;
错误锁定模块:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则调用观察点增加模块。
7.根据权利要求6所述的嵌入式系统软件中概率复现问题的调试系统,其特征在于,所述观察点插入模块:
所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
所述观察点采集的数据存储至空闲内存或闪存区域。
8.根据权利要求7所述的嵌入式系统软件中概率复现问题的调试系统,其特征在于,所述观察点增加模块:
读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并调用问题范围缩小模块;否则,则继续分析下一个事件位置的观察点数据。
所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
9.根据权利要求8所述的嵌入式系统软件中概率复现问题的调试系统,其特征在于,所述问题范围缩小模块:
所述根据观察点采集的数据判断能否缩小问题范围:
若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,调用观察点增加模块;
所述复现观察模块:
重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,调用错误锁定模块;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,调用观察点增加模块。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的嵌入式系统软件中概率复现问题的调试方法的步骤。

说明书全文

嵌入式系统软件中概率复现问题的调试方法、系统及介质

技术领域

[0001] 本发明涉及嵌入式软件的调试技术领域,具体地,涉及嵌入式系统软件中概率复现问题的调试方法、系统及介质。尤其是,涉及对不稳定复现或有随机性的问题现象进行调试。

背景技术

[0002] 随着嵌入式技术的发展与成熟,嵌入式软件的应用领域越来越广。嵌入式软件的开发基本都依赖于嵌入式操作系统应用软件开发人员编写的应用代码需要运行于特定的嵌入式操作系统之上。在嵌入式软件开发过程中,程序调试占据了开发人员的大部分时间。尤其是面对复杂应用场景时,在没有操作系统开发人员的辅助下难以定位问题。在软件调试过程中常碰到的场景如下:
[0003] 1.概率复现类问题,由于问题现场可能会出现在不同时刻不同地点,常规调试手段难以定位,很难找出不同问题现场的共性和规律。
[0004] 2.若待调试程序开启了编译器优化选项,常规调试手段将十分困难,断点很难添加甚至无法进行单步调试。
[0005] 3.常规调试方法会在待调试代码中添加代码,甚至进行打桩,消耗大量CPU时间,影响待调试程序的完整性。
[0006] 相关检索结果1:
[0007] 申请(专利)号:200810224680.X名称:一种软件调试系统及调试方法[0008] 摘要:一种软件调试系统及调试方法,该系统包含相连的PC端和嵌入式系统端,用于对同时运行在PC端和嵌入式系统端的待调试软件进行调试;待调试软件分为N个函数集合,各函数集合中包含一个或多个函数;PC端包含调试控制单元和调试级别判决器;嵌入式系统端包含嵌入式调试接口;调试控制单元设置系统运行级别集合及各函数集合所对应的运行级别值;调试级别判决器在调试过程中截获到第i个函数集合中的函数对第j个函数集合中的函数的调用后,判断第j个函数集合的运行级别值是否包含在系统运行级别集合中,如果是则调用运行在PC端的被调用函数;否则向嵌入式调试接口发送调试命令,由嵌入式调试接口对运行在嵌入式系统端的相同函数进行调用
[0009] 技术要点比较:
[0010] 1.需要在pc端搭建包括调试控制单元和调试级别判决器在内的复杂调试环境,调试过程会影响代码执行过程,破坏待调试代码的完整性。
[0011] 2.此方法只能从函数级别入手,调试粒度比较粗,只能将选中的函数在pc端环境执行,调试自由度不高。且若碰到与时序相关的复杂场景,例如中断和信号的介入,会造成调试困难。
[0012] 相关检索结果2:
[0013] 申请(专利)号:201410010606.3名称:一种多断点的软件调试装置和方法[0014] 摘要:本发明公开了一种多断点的软件调试装置和方法,该软件调试装置包括:驱动器微处理器、指令存储器微码集成开发环境(IDE);上述软件调试装置通过在软件程序中设置断点,获取断点信息,将断点处的指令替换成断点指令,在执行到断点指令时,上报中断、冻结流线,根据IDE下发的命令将所述断点指令换回真实指令,解冻流水线,对断点处的真实指令进行取指,在断点指令执行的间隙将断点处的真实指令再次替换成断点指令的方法来实现多断点的软件调试
[0015] 技术要点比较:
[0016] 该方法依赖于断点的成功设置和触发。在遇到编译器优化选项时,待调试程序会受到优化调整而进行指令重排,断点位置也会被干扰甚至无法在正确的位置加断点从而无法进行调试。
[0017] 相关检索结果3:
[0018] 申请(专利)号:201410353773.8名称:一种软件调试方法及装置
[0019] 摘要:本申请公开了一种软件调试方法及装置,所述方法包括:接收触发事件,判断所述触发事件的类型,查询所述触发事件对应的操作对象,在当前的系统视图窗口中标记出所述操作对象;按照所述触发事件的类型执行该触发事件对应的业务逻辑。本发明通过在系统视图窗口中标记出触发事件对应的操作对象,能够让程序员可视化的看到当前触发的操作对象,这样程序员就能快速定位引起问题的原因,从而找到bug的具体位置,提高了软件调试的效率,避免了由程序员根据经验定位bug造成的时间消耗。
[0020] 技术要点比较:
[0021] 该方法需要依赖于硬件调试装置,对调试资源有特殊要求。

发明内容

[0022] 针对现有技术中的缺陷,本发明的目的是提供一种嵌入式系统软件中概率复现问题的调试方法、系统及介质。
[0023] 根据本发明提供的一种嵌入式系统软件中概率复现问题的调试方法,包括:
[0024] 观察点插入步骤:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
[0025] 等待问题复现步骤:重新执行软件,等待问题复现;
[0026] 观察点增加步骤:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并进入问题范围缩小步骤继续执行;否则,则分析下一事件位置的观察点数据;
[0027] 问题范围缩小步骤:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,返回观察点增加步骤继续执行;如果可以缩小问题范围,则获得缩小范围后的两个观察点,进入复现观察步骤继续执行;
[0028] 复现观察步骤:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,返回观察点增加步骤继续执行;若可以观察到问题稳定复现,进入错误定步骤;
[0029] 错误锁定步骤:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则返回观察点增加步骤继续执行。
[0030] 具体地,所述观察点插入步骤:
[0031] 所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
[0032] 所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
[0033] 所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
[0034] 所述观察点采集的数据存储至空闲内存或闪存区域。
[0035] 具体地,所述观察点增加步骤:
[0036] 读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并进入问题范围缩小步骤继续执行;否则,则继续分析下一个事件位置的观察点数据。
[0037] 所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
[0038] 具体地,所述问题范围缩小步骤:
[0039] 所述根据观察点采集的数据判断能否缩小问题范围:
[0040] 若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
[0041] 若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,返回观察点增加步骤继续执行。
[0042] 具体地,所述复现观察步骤:
[0043] 重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,进入错误锁定步骤继续执行;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,返回观察点增加步骤继续执行。
[0044] 根据本发明提供的一种嵌入式系统软件中概率复现类问题的调试系统,包括[0045] 观察点插入模:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
[0046] 等待问题复现模块:重新执行软件,等待问题复现;
[0047] 观察点增加模块:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并调用问题范围缩小模块;否则,则分析下一事件位置的观察点数据;
[0048] 问题范围缩小模块:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,调用观察点增加模块;如果可以缩小问题范围,则获得缩小范围后的两个观察点,调用复现观察模块;
[0049] 复现观察模块:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,调用观察点增加模块继续执行;若可以观察到问题稳定复现,调用错误锁定模块;
[0050] 错误锁定模块:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则调用观察点增加模块。
[0051] 具体地,所述观察点插入模块:
[0052] 所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
[0053] 所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
[0054] 所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
[0055] 所述观察点采集的数据存储至空闲内存或闪存区域。
[0056] 具体地,所述观察点增加模块:
[0057] 读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并调用问题范围缩小模块;否则,则继续分析下一个事件位置的观察点数据。
[0058] 所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
[0059] 具体地,所述问题范围缩小模块:
[0060] 所述根据观察点采集的数据判断能否缩小问题范围:
[0061] 若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
[0062] 若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,调用观察点增加模块;
[0063] 所述复现观察模块:
[0064] 重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,调用错误锁定模块;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,调用观察点增加模块。
[0065] 根据本发明提供的一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述的嵌入式系统软件中概率复现类问题的调试方法的步骤。
[0066] 与现有技术相比,本发明具有如下的有益效果:
[0067] 1、本发明可以以非入侵的方式对待调试代码进行调试。不会破坏待调试代码的完整性。
[0068] 2、本发明针对概率复现类问题,由于问题现场可能会出现在不同时刻不同地点,常规调试手段难以定位,使用本发明方式可以分析出不同问题现场中的共性和规律,从而缩小问题范围,直到在某段小区间内可以稳定复现问题,从而找到问题。
[0069] 3、本发明针对开启了编译器优化的场景,由于代码执行顺序会被编译器重排,导致常规的调试断点失效,甚至无法进行单步调试。由于本发明方式的观察点通过CPU内部的watchpoint功能添加,不受编译器优化影响,可以快速定位问题。
[0070] 4、针对不能稳定复现的问题,可以快速缩小范围使其能够稳定复现以便定位问题现场。附图说明
[0071] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0072] 图1为本发明提供的调试方法流程示意图。
[0073] 图2为本发明提供的优选例的待调试程序的部分执行序列示意图。
[0074] 图3为本发明提供的优选例的待调试程序的部分执行序列示意图。

具体实施方式

[0075] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
[0076] 根据本发明提供的一种嵌入式系统软件中概率复现问题的调试方法,包括:
[0077] 观察点插入步骤:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
[0078] 等待问题复现步骤:重新执行软件,等待问题复现;
[0079] 观察点增加步骤:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并进入问题范围缩小步骤继续执行;否则,则分析下一事件位置的观察点数据;
[0080] 问题范围缩小步骤:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,返回观察点增加步骤继续执行;如果可以缩小问题范围,则获得缩小范围后的两个观察点,进入复现观察步骤继续执行;
[0081] 复现观察步骤:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,返回观察点增加步骤继续执行;若可以观察到问题稳定复现,进入错误锁定步骤;
[0082] 错误锁定步骤:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则返回观察点增加步骤继续执行。
[0083] 优选地,所述观察点插入步骤:
[0084] 所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
[0085] 所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
[0086] 所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
[0087] 所述观察点采集的数据存储至空闲内存或闪存区域。
[0088] 优选地,所述观察点增加步骤:
[0089] 读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并进入问题范围缩小步骤继续执行;否则,则继续分析下一个事件位置的观察点数据。
[0090] 所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
[0091] 优选地,所述问题范围缩小步骤:
[0092] 所述根据观察点采集的数据判断能否缩小问题范围:
[0093] 若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
[0094] 若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,返回观察点增加步骤继续执行。
[0095] 优选地,所述复现观察步骤:
[0096] 重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,进入错误锁定步骤继续执行;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,返回观察点增加步骤继续执行。
[0097] 本发明提供的嵌入式系统软件中概率复现类问题的调试系统,可以通过本发明给的嵌入式系统软件中概率复现类问题的调试方法的步骤流程实现。本领域技术人员可以将所述嵌入式系统软件中概率复现类问题的调试方法,理解为所述嵌入式系统软件中概率复现类问题的调试系统的一个优选例。
[0098] 根据本发明提供的一种嵌入式系统软件中概率复现类问题的调试系统,包括[0099] 观察点插入模块:在操作系统内各个事件的发生点和结束点插入观察点,令观察点采集数据;
[0100] 等待问题复现模块:重新执行软件,等待问题复现;
[0101] 观察点增加模块:分析观察点采集到的数据,获得分析结果,根据分析结果判断是否要增加观察点:若是,则增加新的观察点,并调用问题范围缩小模块;否则,则分析下一事件位置的观察点数据;
[0102] 问题范围缩小模块:根据观察点采集的数据判断能否缩小问题范围:如果不能缩小问题范围,调用观察点增加模块;如果可以缩小问题范围,则获得缩小范围后的两个观察点,调用复现观察模块;
[0103] 复现观察模块:重新执行软件,观察问题是否稳定复现于获得的缩小范围后的两个观察点范围内:若不能,结合新增加的观察点数据,调用观察点增加模块继续执行;若可以观察到问题稳定复现,调用错误锁定模块;
[0104] 错误锁定模块:根据观察点数据分析可以稳定复现的问题,找到出现错误的现场,若无法找出,则调用观察点增加模块。
[0105] 优选地,所述观察点插入模块:
[0106] 所述事件包括:操作系统发生任务切换的时刻、触发软件或硬件中断的时刻以及中断返回的时刻;
[0107] 所述观察点所采集的数据包括:在事件发生的时刻当前CPU寄存器的状态以及部分关键内存地址的值;
[0108] 所述插入观察点:通过CPU调试功能设置watchpoint来添加观察点;
[0109] 所述观察点采集的数据存储至空闲内存或闪存区域。
[0110] 优选地,所述观察点增加模块:
[0111] 读取观察点数据,获得操作系统事件触发的顺序以及执行序列,定位到离出现问题时刻最近的事件,获取该事件的观察点并进行分析,判断是否出现执行错误:若是,则在该事件的观察点之前添加新的观察点,并调用问题范围缩小模块;否则,则继续分析下一个事件位置的观察点数据。
[0112] 所述执行错误包括:程序执行分支错误、数据流错误以及全局变量错误。
[0113] 优选地,所述问题范围缩小模块:
[0114] 所述根据观察点采集的数据判断能否缩小问题范围:
[0115] 若存在两个连续的观察点数据前一个正常,后一个异常,即表明该两个连续的观察点之间的代码出现问题,因此,若在新增加的观察点数据与原有的观察点数据出现一个正常一个异常的现象,即认为可缩小问题范围,根据观察点采集的数据,分析从哪个观察点开始,观察点的数据产生问题,将问题范围缩小至距离问题发生点最近的两个观察点内,获得缩小范围后的两个观察点。
[0116] 若不存在两个连续的观察点数据前一个正常,后一个异常,则说明此次程序执行序列没有触发问题,即不能缩小范围,调用观察点增加模块;
[0117] 所述复现观察模块:
[0118] 重新执行软件,分析出现问题时刻的前后两次执行过程的操作系统事件触发顺序以及软件执行序列,若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,调用错误锁定模块;若不一致,则表明未稳定地复现问题,结合新增加的观察点数据,调用观察点增加模块。
[0119] 根据本发明提供的一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述的嵌入式系统软件中概率复现类问题的调试方法的步骤。
[0120] 下面通过优选例,对本发明进行更为具体地说明。
[0121] 优选例1:
[0122] 如图1所示,一种嵌入式系统软件中概率复现问题的调试方法,包括:
[0123] 步骤1:在操作系统内各个事件发生点和结束点插入观察点。
[0124] 步骤2:重新执行软件,等待问题复现。
[0125] 步骤3:分析观察点数据,增加观察点。
[0126] 步骤4:如果不能缩小问题范围,回到步骤3。
[0127] 通常,一个待调试的软件bug的位置在某一行代码或某一段代码之中。在执行这一行或这一段代码之前运行状态一切正常。执行之后运行状态出现异常,通常表现为程序执行分支错误,数据流错误,全局变量错误等。
[0128] 建立观察点就是在采集程序运行过程中某一点的状态。例如,某两个连续的采集点数据均正常,即表明在该两点之间的代码没有出现bug。若某两个连续的采集点数据前一个正常,后一个异常,即表明该两点之间的代码出现问题。
[0129] 在初步调试时,这两个采集点之间代码行数会比较多,便于大概定位问题代码位置。初步定位完成后,需要精确定位到某一行代码。便会在这两点之间加入采集点。若在新加入的采集点与旧采集点仍能出现上述的一个正常一个异常的现象,即缩小了问题范围。
[0130] 由于是概率复现类问题,若无法出现上述一个采集点数据正常,后一个数据异常的现象,则说明此次程序执行序列没有触发问题,即不能缩小范围。
[0131] 步骤5:重新执行软件,观察问题是否稳定复现于某两个观察点范围内。若不能,结合新加入的观察点数据分析问题,回到步骤3。若可以观察到稳定复现,进入步骤6。
[0132] 步骤6:根据观察点数据分析可以稳定复现的问题,必要时可再次加入观察点观察。最终能找到出现错误的现场。
[0133] 在步骤1中,事件的定义为操作系统发生任务切换的时刻、触发软件/硬件中断的时刻、中断返回的时刻。观察点所采集的信息包括在上述事件发生的时刻当前CPU寄存器的状态(通用寄存器和特殊寄存器)以及部分关键内存地址的值。通过CPU调试功能设置watchpoint来添加观察点。所采集数据存储至空闲内存或闪存区域。
[0134] 在步骤2中,所述问题即这次调试需要解决的问题。例如一次错误的变量赋值,或算法错误导致的内存溢出,或多线程环境下没有保护公共资源。软件出现上述错误/bug之后,软件运行状态会出现异常,异常状态会被软件的校验功能检测并通过挂起操作系统、输出错误信息等方式告知使用者。此处等待问题复现即等待这些异常现象的出现。
[0135] 在步骤3中,按如下步骤分析观察点数据
[0136] 读取步骤1中的观察点数据,可以得到操作系统事件触发的顺序以及大致的执行序列,定位到离出现问题时刻最近的事件,结合代码分析其观察点数据,由于是概率复现问题,执行序列与问题复现时刻可能有差异,分析前后两次的序列及其观察点数据。分析前后两次的序列即指分析两次执行过程的操作系统事件触发顺序以及软件执行序列。若执行序列和事件触发顺序都一致,则表明这两次执行都稳定地复现了问题,分析观察点数据即指分析有没有出现程序执行分支错误,数据流错误,全局变量错误等。若该观察点数据已经出现错误,则可以在该点之前添加新的观察点。若未出现错误,则继续分析下一个事件位置的观察点数据。
[0137] 在步骤4中,所述缩小问题范围指:例如某次调试中,出现的异常现象是func()函数返回值错误,那么可以在func()函数内3个子函数func_a(),func_b(),func_c()前后分别增加观察点,得到6个观察点信息后,分析从哪个观察点开始,该函数一定会走向错误的分支,得到错误的返回值。
[0138] 假设在func_b()函数之后的观察点信息中,某关键全局变量的值发生错误,而func_b()之前的观察点并没有错误,则可将问题范围缩小至func_b()函数内。
[0139] 重复上述过程,最终可定位出现问题的代码行。整个迭代的过程即缩小问题范围的方式。
[0140] 在步骤5中,假设6个观察点分别是A,B,C,D,E,F。由于问题出现在func_b()中,所以A,B,C观察点信息正常,D,E,F三个观察点信息错误。可称问题复现于C,D两个观察点之间。取距离问题发生点最近的两个观察点,在上述例子中即C,D两点。这样能够最大限度的加快调试进度。所以此调试方法只关注问题发生时刻,距离最近的一前一后两个观察点。
[0141] 优选例2:
[0142] 1.在嵌入式环境下,在操作系统内核的任务切换前后、中断响应前后加入观察点。
[0143] 2.执行待调试程序,等待问题复现。问题复现后,读取观察点数据,得到待调试程序的部分执行序列如图2所示。
[0144] 3.分析ABCD四个观察点可发现AB两个观察点的数据正确,C处数据无法判断,D处数据出现错误,导致在任务C中运行出错。故在任务B的子任务中增加观察点,重新执行待调试程序。
[0145] 4.问题再次复现后,读取观察点数据,发现问题出现时刻发生改变,得到待调试程序的部分执行序列如图3所示。
[0146] 5.再次分析A~F观察点,可发现ABCDE五个观察点的数据正确,F观察点数据错误。结合上一步调试结果,可将问题定位于中断服务程序内。故在中断服务程序内添加观察点。
[0147] 6.重复上述两步操作,最终问题稳定复现并定位至中断服务程序内的某一条代码,整个调试过程结束。
[0148] 本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
[0149] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈