一种寻找软件错误的方法及系统的制作方法

文档序号:6471797阅读:154来源:国知局
专利名称:一种寻找软件错误的方法及系统的制作方法
技术领域
本发明涉及一种寻找软件错误的方法及系统,尤其涉及一种在嵌入式系 统中寻找软件全局变量错误的方法及系统。
背景技术
随着嵌入式CPU的日益强大,嵌入式系统也越来越复杂,当然,在复杂
的系统里,软件的错误也可能很多,如果没有有力的寻找软件错误的方法,
这些错误将严重的影响产品质量,影响公司的形象;本文所描述的就是一种 嵌入式软件寻找软件错误的方法。
嵌入式软件要运行,必须在相应CPU的编译器下编译,产生的代码包括 代码段(RO)、堆栈段(Stack)和全局变量(RW和ZI)。图1示出了嵌入 式软件中的内存分配方式,其中
RO表示代码^殳,这里》文置的是执行代石马,只能读不能写;
Stack表示堆栈段,存储的是执行代码里中断程序调用的返回地址和局部 变量;
RW和ZI都表示的是全局变量,这些数据将一直占着内存,为代码执行 服务。
一般,软件执行的正确性除了要求RO段代码逻辑的正确性外,还要求 stack, RW和ZI里的数据都是正确的,其中全局变量出错导致软件错误在所 有嵌入式软件错误中占有很大的比重。现在普遍的做法就是通过增加测试和 软件模拟的方法,还没有一种能够方便快捷地寻找全局变量错误的方法。

发明内容
本发明要解决的技术问题是提供一种寻找软件错误的方法及系统,可以方便快捷地寻找到全局变量的错误。
为了解决上述问题,本发明寻找软件错误的方法正是根据嵌入式软件内 存方式的特点在全局变量内存去查找软件错误的方法,该方法也适用于采用 其他将全局变量保存在内存中的系统。
本发明提供的寻找软件错误的方法,包括
在执行软件的出错步骤之前和之后,主机分别从运行所述软件的系统或 模拟系统中获取全局变量的数值并保存;
所述主机自动比较执行所述出错步骤之前和之后获取的全局变量的数
值,输出数值发生变化的全局变量的标识;
用户根据所述数值有变化的全局变量的标识查找对这些全局变量的处理 是否存在错误。
进一步地,上述方法还可具有以下特点
在执行所述软件之前,所述主机先保存所述软件编译过程中输出的全局 变量所在内存的地址信息;
所述主机在执行出错步骤之前和之后,分别从运行所述软件的模拟系统 中获取全局变量的数值时,是获取在执行出错步骤之前和之后,全局变量所 在内存区域中存储单元的地址和数值。
进一步地,上述方法还可具有以下特点
在执行所述软件之前,所述主机先保存所述软件编译过程中输出的各个 全局变量的地址与其标识之间的对应关系信息;
所述主机自动比较执行出错步骤前后的全局变量的数值时,是比较执行 出错步骤之前和之后读取的存储单元的地址和数值,查找所有地址相同但数 值不同的存储单元,如查找到,再根据查找到的存储单元的地址查找到对应 的全局变量的标识并输出。
进一步地,上迷方法还可具有以下特点
所述运行所述软件的系统或^t拟系统为嵌入式系统或者为在所述主机上 的嵌入式运行环境即模拟的嵌入式系统。进一步地,上述方法还可具有以下特点
所述出错步骤是指执行软件时发生错误的步骤,包括软件中的一条或多 条指令。
本发明提供的寻找软件错误的系统包括运行所述软件的系统或模拟系 统,以及存储模块、控制模块和比较模块,其中
所述存储模块包括第一数据存储单元,用于保存在执行软件的出错步骤 之前从运行所述软件的系统或模拟系统中获取的全局变量的数值;以及第二 数据存储单元,用于保存在执行软件的出错步骤之后从运行所述软件的系统 或模拟系统中获取的全局变量的数值;
所述控制;f莫块用于与运行所述软件的系统或^i拟系统进行交互,包括执 行所述软件或软件中的部分步骤,在执行軟件的出错步骤之前和之后发出读 取全局变量的命令以获取全局变量的数值并保存在所述第 一数据存储单元或 第二数据存储单元,还用于启动所述比较模块;
所述比较才莫块用于在启动后,自动比较所述第一数据存储单元和第二数 据存储单元中的全局变量的数值,并输出数值发生变化的全局变量的标识。
进一步地,上述系统还可具有以下特点
所述存储模块还包括内存分配信息存储单元,用于保存所述软件编译过 程中输出的全局变量在内存中的地址信息;所述第 一数据存储单元和第二数 椐存储单元保存的是全局变量所在内存区域中存储单元的地址和数值。
进一步地,上述系统还可具有以下特点
所述存储模块还包括变量地址分配信息存储单元,用于保存所述软件编 译过程中输出的各个全局变量的地址与其标识之间的对应关系信息;
所述比较模块自动比较执行出错步骤前后的全局变量的数值时,是比较 第一数据存储单元和第二数据存储单元保存的存储单元的地址和数值,查找 所有地址相同但数值不同的存储单元,如查找到,再根据查找到的存储单元 的地址和所述变量地址分配信息存储单元保存的所述对应关系信息查找到所 述地址对应的全局变量的标识并输出。进一步地,上述系统还可具有以下特点
所述运行所述软件的系统为嵌入式系统,所述存储才莫块、控制;f莫块和比 较模块位于与该嵌入式系统交互的主机上。
进一步地,上述系统还可具有以下特点
所述控制模块和比较模块位于一主机上,所述存储模块位于所述主机上 或与所述主机相连4娄,所述运行所述软件的才莫拟系统为所述主机上的嵌入式 运行环境即模拟的嵌入式系统。
本发明能自动地确定在执行出错步骤时发生变化的全局变量,从而帮助 软件负责人定位全局问题模块,并安排模块负责人查找错误的原因,从而提 高了软件开发的速度,缩短了产品上市的时间。


图l是嵌入式软件中的内存分配的示意图。 图2是本发明实施例系统的结构图。 图3是本发明实施例方法的流程图。
具体实施例方式
图2所示为本实施例系统的结构图,在PC (或其他主机)中有一模拟嵌 入式系统(也可称为模拟嵌入式系统),此外还包括存储模块、控制模块和 比较模块,而存储才莫块又包含内存分配信息存储单元、变量地址分配信息存 储单元、第一数据存储单元和第二存储数据单元,所述内存分配信息存储单 元、变量地址分配信息存储单元、第一数据存储单元和第二数据存储单元对 应于一定的存储区域,这些存储区域可以位于相同或不同的存储器中。而存 储模块也并不要求在主机中,也可以是外接的存储器等,本发明不做限制。 其中
内存分配信息存储单元用于保存内存分配地址信息,包括嵌入式软件中 各个数据段(包含全局变量)所在内存的地址信息。变量地址分配信息存储单元用于保存各个全局变量的地址信息,包含变 量名和地址之间的对应关系信息。
第 一数据存储单元用于保存执行出错步骤前获取的才莫拟嵌入式系统里全
局变量内存区域中存储单元的地址和数值;
第二数据存储单元用于保存执行出错步骤后获取的才莫拟嵌入式系统里全 局变量内存区域中存储单元的地址和数值;
控制模块用于与模拟嵌入式系统进行交互以完成调试过程,包括执行要 调试的软件或软件中的部分步骤,根据各个全局变量的地址信息向模拟嵌入 式系统发出读取全局变量的命令以获取模拟嵌入式系统里全局变量内存区域 中存储单元的地址和数值并保存在所述第一数据存储单元或第二数据存储单 元,还用于启动比较才莫块;
比较模块用于在启动后,自动比较第一数据存储单元和第二数据存储单 元中的存储单元的地址和数值,查找到所有地址相同但数值不同的存储单元, 然后根据查找到的存储单元的地址查找变量地址分配信息,输出执行出错步 骤前后数值有变化的全局变量名。
本实施例方法的流程如图3所示,包括以下步骤
首先保存编译过程中输出的内存分配地址信息和各个全局变量的地址信 息,如可建立内存分配表和变量地址分配表。编译器在编译过程中自动输出 内存分配地址信息,这些信息就是内存分配表的内容,主要存储的是嵌入式 软件中各个数据段的地址信息;并且,编译器还会输出各个全局变量的地址 信息,这些信息也被保存在变量地址分配表里,并建立有变量名和地址之间 的对应关系。
在调试过程中,确定执行软件时发生错误的步骤(文中将该步骤称为出 错步骤,可能包括软件中的一条或多条指令),就开始使用以下流程进行错 误查找,流程图如图2所示,包括
步骤IIO,在执行出错步骤前,主机(如PC机)根据内存分配地址信息 发出读取全局变量的命令,获:^t拟嵌入式系统里全局变量所在内存区域中存储单元的地址和数值并保存; 步骤120,执行出错步骤;
步骤130,主机发出读取全局变量的命令,再次获取4莫拟嵌入式系统里 全局变量所在内存区域中存储单元的地址和数值并保存;
步骤140,主机比较执行出错步骤前后读取的存储单元的地址和数值, 查找所有地址相同但数值不同的存储单元;
步骤150,如查找到,主机再根据查找到的存储单元的地址查找变量地 址表,得到执行出错步骤前后数值有变化的全局变量名;
所述全局变量名也可以用全局变量的其他标识来代替。
步骤160,用户(这里是调试人员)根据这些数值有变化的变量名来查 找对这些全局变量的处理是否存在错误。
全局变量出错导致软件错误在所有嵌入式软件错误中占有很大的比重。 使用上述方法后,可以自动地定位在执行出错步骤前后数值有变化的变量, 相关软件模块开发者获取这些变量名后,就可以针对这些变量的变化,查找 是否存在错误。因此,本发明可以加快错误原因的查找过程,提高软件开发 的速度,缩短了产品上市的时间。
因为嵌入式系统越来越复杂和庞大,各个软件模块相互关联,开发人员 非常难以确定问题出现在哪里,这个方法是一个从根本上辅助查错的方法, 增加了开发人员定位问题的手段。因为它是可行的而且必然能找到问题所在, 因此大大提高了软件开发的速度。
以上方法也可以应用于测试过程中,此时软件已安装在实际的嵌入式系 统中,主机可以从该嵌入式系统获取该软件的全局变量的数值,然后进行自 动比较并输出数值有变化的变量名供用户来做进一步的查找。
明显地,本发明方法对于其他将全局变量保存在内存中的系统也是适用 的,并不局限于应用在嵌入式系统中。
权利要求
1、一种寻找软件错误的方法,包括在执行软件的出错步骤之前和之后,主机分别从运行所述软件的系统或模拟系统中获取全局变量的数值并保存;所述主机自动比较执行所述出错步骤之前和之后获取的全局变量的数值,输出数值发生变化的全局变量的标识;用户根据所述数值有变化的全局变量的标识查找对这些全局变量的处理是否存在错误。
2、 如权利要求l所述的方法,其特征在于在执行所述软件之前,所述主机先保存所述软件编译过程中输出的全局 变量所在内存的地址信息;所述主机在执行出错步骤之前和之后,分别从运行所述软件的模拟系统 中获取全局变量的数值时,是获取在执行出错步骤之前和之后,全局变量所 在内存区域中存储单元的地址和数值。
3、 如权利要求2所述的方法,其特征在于在执行所述软件之前,所述主机先保存所述软件编译过程中输出的各个 全局变量的地址与其标识之间的对应关系信息;所述主机自动比较执行出错步骤前后的全局变量的数值时,是比较执行 出错步骤之前和之后读取的存储单元的地址和数值,查找所有地址相同但数 值不同的存储单元,如查找到,再根据查找到的存储单元的地址查找到对应 的全局变量的标识并输出。
4、 如权利要求1或2或3所述的方法,其特征在于所述运行所述软件的系统或才莫拟系统为嵌入式系统或者为在所述主机上 的嵌入式运行环境即才莫拟的嵌入式系统。
5、 如权利要求4所述的方法,其特征在于所述出错步骤是指执行软件时发生错误的步骤,包括软件中的一条或多 条指令。
6、 一种寻找软件错误的系统,其特征在于,包括运行所述软件的系统或 模拟系统,以及存储模块、控制模块和比较模块,其中所述存储才莫块包括第一数据存储单元,用于保存在执行软件的出错步骤 之前从运行所述软件的系统或模拟系统中获取的全局变量的数值;以及第二 数据存储单元,用于保存在执行软件的出错步骤之后从运行所述软件的系统 或模拟系统中获取的全局变量的数值;所述控制模块用于与运行所述软件的系统或模拟系统进行交互,包括执 行所述软件或软件中的部分步骤,在执行软件的出错步骤之前和之后发出读 取全局变量的命令以获取全局变量的数值并保存在所述第一数据存储单元或 第二数据存储单元,还用于启动所述比较模块;所述比较模块用于在启动后,自动比较所述第一数据存储单元和第二数 据存储单元中的全局变量的数值,并输出数值发生变化的全局变量的标识。
7、 如权利要求6所述的系统,其特征在于所述存储模块还包括内存分配信息存储单元,用于保存所述软件编译过 程中输出的全局变量在内存中的地址信息;所述第 一数据存储单元和第二数 据存储单元保存的是全局变量所在内存区域中存储单元的地址和数值。
8、 如权利要求7所述的系统,其特征在于所述存储才莫块还包括变量地址分配信息存储单元,用于保存所述软件编 译过程中输出的各个全局变量的地址与其标识之间的对应关系信息;所述比较模块自动比较执行出错步骤前后的全局变量的数值时,是比较 第一数据存储单元和第二数据存储单元保存的存储单元的地址和数值,查找 所有地址相同但数值不同的存储单元,如查找到,再根据查找到的存储单元 的地址和所述变量地址分配信息存储单元保存的所述对应关系信息查找到所 述地址对应的全局变量的标识并输出。
9、 如权利要求6或7或8所述的系统,其特征在于所述运行所述软件的系统为嵌入式系统,所述存储模块、控制模块和比 较^^莫块位于与该嵌入式系统交互的主机上。
10、如权利要求6或7或8所述的系统,其特征在于所述控制模块和比较模块位于一主机上,所述存储模块位于所述主机上 或与所述主机相连接,所述运行所述软件的才莫拟系统为所述主机上的嵌入式 运行环境即模拟的嵌入式系统。
全文摘要
一种寻找软件错误的方法及系统,在执行软件的出错步骤之前和之后,主机分别从运行所述软件的系统或模拟系统中获取全局变量的数值并保存;所述主机自动比较执行所述出错步骤之前和之后获取的全局变量的数值,输出数值发生变化的全局变量的标识;用户根据所述数值有变化的全局变量的标识查找对这些全局变量的处理是否存在错误。相应地,本发明提供的寻找软件错误的系统包括运行所述软件的系统或模拟系统,以及存储模块、控制模块和比较模块。采用本发明可以方便快捷地寻找到全局变量的错误。
文档编号G06F11/36GK101425038SQ20081023989
公开日2009年5月6日 申请日期2008年12月19日 优先权日2008年12月19日
发明者游明琦 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1