本发明涉及无线传感器网络监测技术领域,特别涉及一种wsn程序中线程访问共享资源出错的检测方法及工具。
背景技术:
近几年来,随着无线通信技术、微电子技术的不断进步,wsn(wirelesssensornetworks,无线传感器网络)得到了快速发展。然而,随着越来越多的wsn被部署到实际应用中,这些实际应用也常常因为wsn程序的质量问题而产生不可预知的故障。wsn程序主要的功能包括对传感器数据进行采集、转发和处理,需要大量事件处理过程实例(线程)的协同工作以完成这些功能。事件处理过程实例是并发交织地执行的,包括执行对共享信道的使用和对共享变量读写等。而事件处理过程实例对这些共享资源的交织访问都可能导致wsn程序产生并发错误。当共享信道使用异常时,也即是共享信道处于忙碌状态,则会导致传感器数据包的发送不成功,因此会出现丢失数据包的情况。当共享变量读写异常时,写操作所写入的数据可能会丢失或者是被另一个写操作修改。
随着越来越多的wsn程序被部署到实际环境之中,这些wsn程序在运行过程中也常常会出现一些不可预知的故障。而引起这些故障的一个常见原因,是存在于wsn程序中的错误。例如,瑞士科学家开发的针对于阿尔卑斯冰川收集气象信息的wsn程序,曾发生过所有gsm节点同时丢包的现象,这是由于gprs驱动程序中的软件缺陷导致的故障。
可见,对于wsn的实际应用,怎样有效的发现并减少wsn程序中的错误是至关重要的问题。一般对于软件错误,我们能想到的最直接且最有效的手段就是对软件进行测试。而对于wsn程序,它与一般的软件有所不同。一般的软件系统,在被应用到实际领域之后,我们也能很方便对其进行测试维护等。而对于wsn程序,一旦被部署到实际环境(尤其是一些人们难以到达的环境,比如冰川、火山等),受这些实际环境影响,人们很难对其进行测试查错等。因此,针对于wsn程序的测试,一般是在其部署前通过模拟实际环境对其进行的。而现有的一些wsn测试工具,例如sentomist以及t-morph,它们是针对tinyos程序进行的基于线程的动态测试。sentomist通过搜集实例区间内的指令计数来发现程序错误,t-morph通过搜集事件过程实例区间内的函数调用序列来发现程序错误。它们并不能很好的发现程序中由共享资源的交织访问导致的并发错误,并且它们的误报率较高。
因此,有必要开发针对共享资源访问错误的检测方法,在wsn程序实际部署之前,模拟wsn程序的运行,并监测运行中可能存在的软件错误。
技术实现要素:
本发明的第一目的在于克服现有技术的缺点与不足,提供一种wsn程序中线程访问共享资源出错的检测方法,该方法可以有效检测wsn程序中的共享信道的错误模式和共享变量的错误模式。
本发明的第二目的在于提供一种wsn程序中线程访问共享资源出错的检测工具。
本发明的第三目的在于提供一种存储介质。
本发明的第四目的在于提供一种计算设备。
本发明的第一目的通过下述技术方案实现:一种wsn程序中线程访问共享资源出错的检测方法,步骤如下:
步骤s1、定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式;
其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误;
共享变量的错误模式包括第一种错误模式和第二种错误模式,其中第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改;第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失;
步骤s2、在wsn模拟器中动态的运行wsn被测程序,针对wsn被测程序运行行为进行监测;包括:
监测被测程序的数据包发送情况,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;检测被测程序运行过程中,第一字符串和第二字符串出现的情况,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式;
监测被测程序中各共享变量的访问情况,每当出现共享变量的访问操作时,获取该共享变量的读写序列;然后将该共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。
优选的,步骤s2中还包括以下线程识别步骤,具体为:在被测程序运行过程中,动态的识别被测程序中每条指令所属线程;
所述步骤s2中,在监控被测程序中各共享变量的访问情况时,每当出现共享变量的访问操作时,确定每次访问操作是读操作还是写操作,并且通过线程识别步骤判断每次读操作或写操作所属线程,得到共享变量的读写序列。
更进一步的,所述步骤s2中,通过滑动窗口收集到共享变量的读写序列,当滑动窗口存满时,针对滑动窗口内的共享变量的读写序列进行与共享变量的错误模式匹配。
更进一步的,共享变量的错误模式中第一种错误模式具体为:当多个线程针对于同一共享变量进行访问操作时,若一个线程在写入数据操作后,该线程在读取上述写入的数据操作之前出现另一个线程写入数据操作,则确定为该线程所写入的数据被另一个线程的写入操作意外修改;
共享变量的错误模式中第二种错误模式具体为:当多个线程针对于同一共享变量进行访问操作时,若一个线程在数据写入操作后依次出现另一个线程的数据写入和读取操作,则确定该线程所写入的数据丢失;
针对于共享变量的读写序列与共享变量的错误模式进行匹配时,具体为,针对于共享变量的读写序列:
判定是否存在以下情况:第一线程执行的数据写入操作后,首先出现第二线程执行的数据写入操作,然后出现第一线程执行的数据读取操作;若是,则判定第一线程所写入的数据被第二线程意外修改,即判定被测程序存在共享变量的错误模式中的第一种错误模式;
判定是否存在以下情况:第一线程执行的数据写入操作后,依次出现第二线程执行的数据写入操作和数据读取操作,若是,则判定第一线程所写入的数据丢失,即判定被测程序存在共享变量的错误模式中的第二种错误模式。
优选的,还包括如下步骤:
当判定被测程序存在共享信道的错误模式时,确定连续出现第一字符串和第二字符串时对应被测程序所执行的程序,定位得到错误所在的代码语句行;
当判定被测程序存在共享变量的错误模式时,根据共享变量的读写序列中判定出共享变量错误模式的读写操作记录,定位得到错误所在的代码语句行。
本发明的第二目的通过下述技术方案实现:一种用于实现本发明第一目的所述检测方法的wsn程序中线程访问共享资源出错的检测工具,包括用户界面子系统、数据处理子系统和模拟分析子系统;
所述用户界面子系统,用于提供参数配置功能以及用于显示线程访问共享资源出错时对应的共享资源访问错误模式;
数据处理子系统,用于用户界面子系统与模拟分析子系统之间的数据传递;
所述模拟分析子系统包括共享资源访问错误模式定义模块、被测程序的模拟运行模块、在线监测模块、读写序列记录分析模块、第一错误模式判定模块和第二错误模式判定模块;
共享资源访问错误模式定义模块,用于定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式;其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误;共享变量的错误模式包括第一种错误模式和第二种错误模式,其中第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改;第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失;
被测程序的模拟运行模块,用于在wsn模拟器中动态运行wsn被测程序;
在线监测模块,用于针对wsn被测程序运行行为进行监测,包括监测被测程序的数据包发送情况和监测被测程序中各共享变量的访问情况;其中,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;
读写序列记录分析模块,用于在被测程序运行过程中出现共享变量的访问操作时,收集共享变量的读写序列;
第一错误模式判定模块,用于在被测程序运行过程中,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式;
第二错误模式判定模块,用于将共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。
优选的,所述wsn模拟器为avrora模拟器;
所述模拟分析子系统还包括od文件分析模块和错误定位模块;
od文件分析模块,用于将被测程序转换成od文件格式;并且对被测程序对应的od文件进行分析,通过扫描od文件中的test_run.od文件的data段和bss段,将所有共享变量及共享变量的地址记录下来;通过扫描被测程序代码段test段,记录被测程序各执行点信息;通过扫描test_info.od文件,记录od文件及源文件对应的行号信息;
错误定位模块,用于当判定被测程序存在共享信道的错误模式时,确定连续出现第一字符串和第二字符串时对应被测程序所执行的程序,定位得到错误所在的代码语句行;用于当判定被测程序存在共享变量的错误模式时,根据共享变量的读写序列中判定出共享变量错误模式的读写操作记录,定位得到错误所在的代码语句行。
优选的,所述在线监测模块还包括线程识别模块,用于在被测程序运行过程中,动态的识别被测程序中每条指令所属线程;
所述读写序列记录分析模块在收集共享变量的读写序列时,确定每次访问操作是读操作还是写操作,同时通过线程识别模块判定每次读操作或写操作所属线程,得到共享变量的读写序列。
本发明的第三目的通过下述技术方案实现:一种存储介质,存储有程序,所述程序被处理器执行时,实现本发明第一目的所述的wsn程序中线程访问共享资源出错的检测方法。
本发明的第四目的通过下述技术方案实现:一种计算设备,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现本发明第一目的所述的wsn程序中线程访问共享资源出错的检测方法。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明wsn程序中线程访问共享资源出错的检测方法,首先定义共享信道的错误模式和共享变量的错误模式,共享变量的错误模式包括第一种错误模式和第二种错误模式;然后在wsn模拟器中动态的运行wsn被测程序,监测被测程序的数据包发送情况,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;检测被测程序运行过程中,根据第一字符串和第二字符串出现的情况判定被测程序是否存在共享信道的错误模式;监测被测程序中各共享变量的访问情况,获取该共享变量的读写序列;将该共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于共享变量的错误模式;通过本发明方法能够检测出共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误,也能够检测wsn程序中一个线程所写入的数据被其他线程意外修改的错误,以及wsn程序中线程所写入的数据丢失的错误,既可以全面准确地对wsn程序中线程访问共享资源出错进行检测,又可以明确访问共享资源所出现的错误类型,方便实现针对性的调试,进而提高了wsn程序的质量。
(2)本发明wsn程序中线程访问共享资源出错的检测方法中,每当出现共享变量的访问操作,通过确定每次共享变量的访问操作是读操作还是写操作,并判断每次读操作或写操作的所属线程,进而才能实现检测出第一线程执行的数据写入操作之后是第一错误模式下的先出现第二线程执行的数据写入操作,再出现第一线程执行的数据读取操作,或者是第二错误模式下的依次出现第二线程执行的数据写入操作和数据读取操作。
(3)本发明wsn程序中线程访问共享资源出错的检测方法中,当判定被测程序存在共享信道的错误模式或者共享变量的错误模式时,通过对错误所在的代码语句行进行定位,可以方便查看错误和检查被测程序,提高对wsn程序的调试效率。
附图说明
图1是本发明wsn程序中线程访问共享资源出错的检测方法的流程图。
图2是本发明wsn程序中线程访问共享资源出错的检测工具的结构框图。
图3是本发明检测工具检测共享信道的错误模式的结果示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1
本实施例公开了一种wsn程序中线程访问共享资源出错的检测方法,如图1所示,步骤如下:
步骤s1、定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式。
其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误。
共享变量的错误模式包括第一种错误模式和第二种错误模式,其中,
第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改。具体来说,当多个线程针对于同一共享变量进行访问操作时,若一个线程在写入数据操作后,该线程在读取上述写入的数据操作之前出现另一个线程写入数据操作,则确定为该线程所写入的数据被另一个线程的写入操作意外修改。
第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失。具体来说,当多个线程针对于同一共享变量进行访问操作时,若一个线程在数据写入操作后依次出现另一个线程的数据写入和读取操作,则确定该线程所写入的数据丢失。
步骤s2、在wsn模拟器中动态的运行wsn被测程序,动态的识别被测程序中每条指令所属线程,并且针对wsn被测程序运行行为进行监测;包括:
监测被测程序的数据包发送情况,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;检测被测程序运行过程中,第一字符串和第二字符串出现的情况,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式。在本实施例中,第一字符串具体可以设置为“send”,第二字符串具体可以设置成“senddone”,被测程序存在共享信道的错误模式即为出现连续的“send”。
监测被测程序中各共享变量的访问情况,每当出现共享变量的访问操作时,确定每次针对该共享变量的访问操作是读操作还是写操作,并且判断每次读操作或写操作所属线程,从而得到该共享变量的读写序列;然后将该共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。具体为,针对于共享变量的读写序列:
判定是否存在以下情况:第一线程执行的数据写入操作后,首先出现第二线程执行的数据写入操作,然后出现第一线程执行的数据读取操作;若是,则判定第一线程所写入的数据被第二线程意外修改,即判定被测程序存在共享变量的错误模式中的第一种错误模式;
判定是否存在以下情况:第一线程执行的数据写入操作后,依次出现第二线程执行的数据写入操作和数据读取操作,若是,则判定第一线程所写入的数据丢失,即判定被测程序存在共享变量的错误模式中的第二种错误模式。
如图3中所示为运行被测程序时检测出现错误的情况,当出现共享信道的错误模式时,将接收到字符串send,接收的字符串如图3的框中所显示,此时表示共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误。
当出现共享变量的错误模式中第二种错误模式,即数据包丢失的情况时,共享变量的读写序列中将出现:一个线程写入数据后,另一个线程进行写入数据操作,接着另一个线程进行数据读取操作;如图3中左侧所示,其中图3中左侧出现w(248,22)w(312,22)r(312,22)表示的是sign共享变量的错误模式,该序列是共享变量读写序列中的其中一部分序列,248和312分别表示两个不同的线程,22表示adc中断,通过中断触发对应线程的执行;w(248,22)表示的是针对于共享变量sign进行访问时,线程248进行的写入数据操作;w(312,22)表示的是针对于共享变量sign进行访问时,线程312进行的写入数据操作;r(312,22)表示的是针对于共享变量sign进行访问时,线程312进行的读取数据操作;w(248,22)w(312,22)r(312,22)表示的是共享变量sign的读写序列中出现线程248写入数据操作后,线程312进行写入数据操作,接着线程312进行读取数据操作,这是由于数据包发送失败引起线程248读取数据操作丢失的情况;相关人员可以观察共享变量读写序列中出现的操作判定出共享变量的错误模式。
本实施例具体是通过滑动窗口收集到共享变量的读写序列,每当被测程序关于同一共享变量有新的读写操作产生时,实时的更新滑动窗,当滑动窗口存满时,针对滑动窗口内的共享变量的读写序列进行与共享变量的错误模式匹配。
步骤s3、当判定被测程序存在共享信道的错误模式时,确定连续出现第一字符串send和第二字符串senddone时对应被测程序所执行的程序,定位得到错误所在的代码语句行。当判定被测程序存在共享变量的错误模式时,根据共享变量的读写序列中判定出共享变量错误模式的读写操作记录,定位得到错误所在的代码语句行。
图3中右边灰色填充部分即为定位到的出现错误的程序代码语句,其中dumpedfile框内的灰色填充部分表示出现共享变量的错误模式对应od文件的语句,sourcefile框中的灰色部分表示出现共享变量的错误模式对应源文件的语句。
在本实施例上述方法所使用的wsn模拟器能够提供一个模拟平台,使得wsn程序能够在计算机上模拟真实硬件环境来运行,以便在部署前对wsn程序进行分析测试,本实施例中可以采用avrora模拟器,能够动态运行wsn被测程序。本实施例中wsn程序为tinyos程序,即wsn程序基于tinyos操作系统上实现。
实施例2
本实施例公开了一种wsn程序中线程访问共享资源出错的检测工具,用于实现实施例1中所述的检测方法,如图2所示,包括:包括用户界面子系统、数据处理子系统和模拟分析子系统。具体地,
用户界面子系统,用于提供参数配置功能以及用于显示线程访问共享资源出错时对应的共享资源访问错误模式。
数据处理子系统,用于用户界面子系统与模拟分析子系统之间的数据传递。
模拟分析子系统包括共享资源访问错误模式定义模块、od文件分析模块、被测程序的模拟运行模块、在线监测模块、读写序列记录分析模块、第一错误模式判定模块和第二错误模式判定模块;
共享资源访问错误模式定义模块,用于定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式。
其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误;
共享变量的错误模式包括第一种错误模式和第二种错误模式,其中第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改;第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失。
od文件分析模块,用于将被测程序转换成od文件格式;并且对被测程序对应的od文件进行分析,通过扫描od文件中的test_run.od文件的data段和bss段,将所有共享变量及共享变量的地址记录下来;通过扫描被测程序代码段test段,记录被测程序各执行点信息;通过扫描test_info.od文件,记录od文件及源文件对应的行号信息。
被测程序的模拟运行模块,用于在wsn模拟器中动态运行wsn被测程序。在本实施例中,wsn模拟器能够提供一个模拟平台,使得wsn程序能够在计算机上模拟真实硬件环境来运行,以便在部署前对wsn程序进行分析测试,本实施例中可以采用avrora模拟器,能够动态运行wsn被测程序。
在线监测模块,用于针对wsn被测程序运行行为进行监测,包括监测被测程序的数据包发送情况和监测被测程序中各共享变量的访问情况;其中,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串。本实施例的在线监测模块还包括:线程识别模块,用于在被测程序运行过程中,动态的识别被测程序中每条指令所属线程。
读写序列记录分析模块,用于在被测程序运行过程中出现共享变量的访问操作时,收集共享变量的读写序列。具体来说,读写序列记录分析模块在收集共享变量的读写序列时,确定每次访问操作是读操作还是写操作,同时通过线程识别模块判定每次读操作或写操作所属线程,得到共享变量的读写序列。
第一错误模式判定模块,用于在被测程序运行过程中,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式。
第二错误模式判定模块,用于将共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。
在本实施例中,wsn程序为tinyos程序,即wsn程序基于tinyos操作系统上实现,wsn程序所使用的语言为nesc语言,因此源代码为nesc程序。wsn程序中线程访问共享资源出错的检测工具的检测过程,具体为:
(1)通过用户界面子系统输入配置参数:编写wsn程序的外部配置文件.prj,外部配置文件指定了wsn程序的运行参数,在运行wsn程序时会先加载外部配置文件。外部配置文件包括被编译后的wsn程序的路径。
(2)通过数据处理子系统编译nesc程序,生成od文件:
首先编译nesc程序,得到main.exe文件;
将main.exe文件改名为.elf,得到.elf文件;
然后使用objdump工具对.elf文件进行反汇编,得到wsn程序的两个可运行文件:test_run.od文件和test_info.od文件。
其中,在反汇编时,test_run.od文件使用了objdump工具的-zhd参数,而test_info.od文件使用了objdump工具的-zhld参数。与test_run.od文件不同的是,test_info.od文件中含有行号等信息,便于实现源文件与.od文件的行号转换。
(3)通过数据处理子系统加载wsn程序的外部配置文件.prj。
(4)通过od文件分析模块对od文件静态扫描:通过扫描test_run.od文件的data段和bss段,将所有共享变量及其地址记录下来,并使用hashmap将变量及其地址建立起映射;通过扫描test_run.od文件的代码段test段,记录执行点信息,并使用hashmap将执行点及其地址建立起映射。od文件分析模块还通过扫描test_info.od文件,记录od文件以及源文件对应的行号信息。
通过共享资源访问错误模式定义模块定义共享信道的错误模式和共享变量的错误模式。其中,设置第一字符串为“send”,第二字符串为“senddone”。
通过被测程序的模拟运行模块在wsn模拟器中动态运行wsn被测程序。
通过在线监测模块监测被测程序的数据包发送情况和监测被测程序中各共享变量的访问情况。并且,当wsn中节点准备发送数据包时,记录第一字符串“send”;当目标节点收到数据包的时候,记录第二字符串“senddone”,针对于记录的第一字符串和第二字符串,在用户界面中进行显示。用于在被测程序运行过程中,通过线程识别模块动态的识别被测程序中每条指令所属线程。
通过读写序列记录分析模块在被测程序运行过程中出现共享变量的访问操作时,收集共享变量的读写序列,在共享变量的读写序列中包括线程针对共享变量的具体访问操作,即写入数据和读取数据操作。其中:
当读写序列记录分析模块检测到一个线程在写入数据操作后,该线程在读取上述写入的数据操作之前出现另一个线程写入数据操作,则判定出现第一种错误模式,即是该线程所写入的数据被另一个线程的写入操作意外修改。
当读写序列记录分析模块检测到一个线程在数据写入操作后依次出现另一个线程的数据写入和读取操作,则判定出现第二种错误模式,即是该线程所写入的数据丢失。同时,针对于被测程序存在的第一种错误模式和第二种错误模式,定位到错误所在的代码语句行。
第一错误模式判定模块在被测程序运行过程中,判定被测程序是否出现共享信道的错误模式,其中当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式,即被测程序在运行过程中,共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误。当读写序列记录分析模块检测到被测程序出现连续的“send”,则判定出现共享信道的错误模式。相关人员通过用户界面显示的sendsenddone序列即可知出现了共享信道的错误模式,如图3中所示。
第二错误模式判定模块将共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。本实施例中,将共享变量的读写序列中判定出的第一种错误模式或第二种错误模式在用户界面显示出来。其中如图3中所示,当用户界面显示的sign共享变量的读写序列中部分序列w(248,22)w(312,22)r(312,22)时,相关人员可知是出现了数据丢包的情况。
错误定位模块,用于当判定被测程序存在共享信道的错误模式时,确定连续出现第一字符串和第二字符串时对应被测程序所执行的程序,定位得到错误所在的代码语句行;用于当判定被测程序存在共享变量的错误模式时,根据共享变量的读写序列中判定出共享变量错误模式的读写操作记录,定位得到错误所在的代码语句行。例如可直接点击第一字符串send或第二字符串即可直接定位到该字符串对应在被测程序中所执行的代码语句行。在本实施例中,针对于定位到的代码语句行,通过颜色高亮显示在用户界面中所显示的代码,如图3中所示。
如下表1为本实施例检测工具的监测结果与现有工具t-morph监测结果的对比情况。
表1
从表1可得,本实施例的检测工具检测到了wsn被测程序中所存在的多个共享资源访问错误模式,包括两个共享信道错误模式、一个第一种错误模式和一个第二种错误模式。现有工具t-morph只检测到了其中一个共享信道错误模式。可见,本实施例检测工具相较于现有工具,能够全面和准确地检测到共享资源访问错误模式,检测的准确率和可靠性更高。
在此需要说明的是,本实施例的监测工具仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
实施例3
本实施例公开了一种存储介质,存储有程序,所述程序被处理器执行时,实现实施例1所述的wsn程序中线程访问共享资源出错的检测方法,具体如下:
步骤s1、定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式;
其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误;
共享变量的错误模式包括第一种错误模式和第二种错误模式,其中第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改;第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失;
步骤s2、在wsn模拟器中动态的运行wsn被测程序,针对wsn被测程序运行行为进行监测;包括:
监测被测程序的数据包发送情况,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;检测被测程序运行过程中,第一字符串和第二字符串出现的情况,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式;
监测被测程序中各共享变量的访问情况,每当出现共享变量的访问操作时,获取该共享变量的读写序列;然后将该共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。
本实施例中的存储介质可以是磁盘、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、u盘、移动硬盘等介质。
实施例4
本实施例公开了一种计算设备,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现实施例1所述的wsn程序中线程访问共享资源出错的检测方法,,具体如下:
步骤s1、定义共享资源访问错误模式,包括共享信道的错误模式和共享变量的错误模式;
其中,共享信道的错误模式指的是:共享信道处于忙的状态下引起的wsn节点数据包发送失败的错误;
共享变量的错误模式包括第一种错误模式和第二种错误模式,其中第一种错误模式为:当多个线程针对于同一共享变量进行访问操作时,wsn程序中一个线程所写入的数据被另一个线程的写入操作意外修改;第二种错误模式为:当多个线程针对于同一共享变量进行访问操作时,一个线程所写入的数据丢失;
步骤s2、在wsn模拟器中动态的运行wsn被测程序,针对wsn被测程序运行行为进行监测;包括:
监测被测程序的数据包发送情况,当wsn中节点准备发送数据包时,记录第一字符串;当目标节点收到数据包的时候,记录第二字符串;检测被测程序运行过程中,第一字符串和第二字符串出现的情况,当连续出现第一字符串时,则判定被测程序存在共享信道的错误模式;
监测被测程序中各共享变量的访问情况,每当出现共享变量的访问操作时,获取该共享变量的读写序列;然后将该共享变量的读写序列与共享变量的错误模式进行匹配,确定该共享变量的读写序列是否属于第一种错误模式或第二种错误模式。
本实施例中所述的计算设备可以是台式电脑、笔记本电脑、智能手机、pda手持终端、平板电脑或其他具有处理器功能的终端设备。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。