CN104216764A - 一种基于多线程嵌入式系统并行程序跟踪与回放方法 - Google Patents

一种基于多线程嵌入式系统并行程序跟踪与回放方法 Download PDF

Info

Publication number
CN104216764A
CN104216764A CN201410369935.7A CN201410369935A CN104216764A CN 104216764 A CN104216764 A CN 104216764A CN 201410369935 A CN201410369935 A CN 201410369935A CN 104216764 A CN104216764 A CN 104216764A
Authority
CN
China
Prior art keywords
thread
program
record
embedded system
playback
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
Application number
CN201410369935.7A
Other languages
English (en)
Other versions
CN104216764B (zh
Inventor
张晶
潘有顺
陈沫良
张果
崔毅
严涵
沈江炎
容会
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kunming University of Science and Technology
Original Assignee
Kunming University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kunming University of Science and Technology filed Critical Kunming University of Science and Technology
Priority to CN201410369935.7A priority Critical patent/CN104216764B/zh
Publication of CN104216764A publication Critical patent/CN104216764A/zh
Application granted granted Critical
Publication of CN104216764B publication Critical patent/CN104216764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于多线程嵌入式系统并行程序跟踪与回放方法,属于并行程序调试与检测技术领域。本发明在并行程序执行阶段,记录多个线程执行路径信息,并生成一个记事本文件;当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。本发明记录并保存了多个线程程序执行路径信息。确保并行的多个线程程序按照记事本文件中保存的路径信息进行重演。能以较小的软件开销实现嵌入式系统中并行程序执行路径的跟踪与回放。

Description

一种基于多线程嵌入式系统并行程序跟踪与回放方法
技术领域
本发明涉及一种基于多线程嵌入式系统并行程序跟踪与回放方法,属于并行程序调试与检测技术领域。
背景技术
调度、通信与同步控制等操作在嵌入式系统中并行程序经常发生,且存在随机性。这些使得并行程序运行结果具有不确定性与不可再现性。处于同一进程中的多个线程共享相同资源,即使程序初始条件相同,由于嵌入式系统中断、操作延时以及噪声等内外环境因素的干扰,很大程度上影响并改变了系统中并行程序的执行和响应时间,直接引起了线程调度、通信与同步操作可控性降低,导致了系统存在不确定性,甚至在系统出现竞态条件。
因此,在嵌入式系统开发过程中,为了消除系统具有的不确定性因素可能产生的如竞态条件等系统可靠性问题,同时掌握程序运行过程中的详细的动态信息,需要充分考虑如何实现有效地追踪嵌入式系统中的并行程序的执行路径并进行回放,以便分析多线程执行过程中存在的问题,保障系统的安全稳定的运行。
发明内容
本发明提供了一种基于多线程嵌入式系统并行程序跟踪与回放方法,以用于解决嵌入式系统中多线程并行程序运行中表现出的不确定性和结果的不可再现等问题。
本发明的技术方案是:一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
              A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
              A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
              A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过JTAG工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
所述步骤A4中所述的线程记录TM是指在嵌入式系统中,处于运行态的线程一次执行过程所记录的相关执行信息,用一个三元组TM=<t,m,o>表示;
其中,t表示在任意时刻正在运行的线程,m表示线程t调用的函数或方法,o表示线程t所访问的对象类型,包括空Null、数据D、信号量S和消息M。
所述步骤A6中所述的线程队列TQ是指在嵌入式系统中,并行程序执行过程中所有线程记录TM所形成的一组序列,用TQ=<TM1,TM2,……TMn>表示;              
其中,TMn 表示系统中并行程序中一个线程记录,n表示线程运行的时间点。
所述TQ中TMn之间具有时间上的先后关系。
本发明的有益效果是:针对嵌入式系统中多线程并行程序,采用面向方面的技术进行扫描,通过嵌入式系统软硬件框架,记录并保存了多个线程程序执行路径信息。确保并行的多个线程程序按照记事本文件中保存的路径信息进行重演。能以较小的软件开销实现嵌入式系统中并行程序执行路径的跟踪与回放,对嵌入式系统中的多线程数据竞争检测研究,具有重要的参考价值。
附图说明
图1为本发明中的流程图;
图2为本发明中在并行程序执行阶段,记录多个线程执行路径信息的嵌入式系统中程序运行路径追踪软硬件框架结构图;
图3为本发明中在并行程序回放阶段,确保并行程序按照记事本文件中保存的路径重演的嵌入式系统中程序路径回放软硬件框架结构图;
图4为本发明中实施例6产生的线程队列TQ回放过程的样式图。
具体实施方式
实施例1:如图1-3所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
实施例2:如图1-3所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
              A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
              A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
              A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过JTAG工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
实施例3:如图1-3所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
              A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
              A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
              A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过JTAG工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
所述步骤A4中所述的线程记录TM是指在嵌入式系统中,处于运行态的线程一次执行过程所记录的相关执行信息,用一个三元组TM=<t,m,o>表示;
其中,t表示在任意时刻正在运行的线程,m表示线程t调用的函数或方法,o表示线程t所访问的对象类型,包括空Null、数据D、信号量S和消息M。
实施例4:如图1-3所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
              A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
              A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
              A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过JTAG工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
所述步骤A4中所述的线程记录TM是指在嵌入式系统中,处于运行态的线程一次执行过程所记录的相关执行信息,用一个三元组TM=<t,m,o>表示;
其中,t表示在任意时刻正在运行的线程,m表示线程t调用的函数或方法,o表示线程t所访问的对象类型,包括空Null、数据D、信号量S和消息M。
所述步骤A6中所述的线程队列TQ是指在嵌入式系统中,并行程序执行过程中所有线程记录TM所形成的一组序列,用TQ=<TM1,TM2,……TMn>表示;              
其中,TMn 表示系统中并行程序中一个线程记录,n表示线程运行的时间点。
实施例5:如图1-3所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
              A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
              A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
              A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过JTAG工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
所述步骤A4中所述的线程记录TM是指在嵌入式系统中,处于运行态的线程一次执行过程所记录的相关执行信息,用一个三元组TM=<t,m,o>表示;
其中,t表示在任意时刻正在运行的线程,m表示线程t调用的函数或方法,o表示线程t所访问的对象类型,包括空Null、数据D、信号量S和消息M。
所述步骤A6中所述的线程队列TQ是指在嵌入式系统中,并行程序执行过程中所有线程记录TM所形成的一组序列,用TQ=<TM1,TM2,……TMn>表示;              
其中,TMn 表示系统中并行程序中一个线程记录,n表示线程运行的时间点。
所述TQ中TMn之间具有时间上的先后关系。
实施例6:如图1-4所示,一种基于多线程嵌入式系统并行程序跟踪与回放方法,
S1:在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
宿主机操作系统为Windows XP系统,嵌入式开发工具为ADC,目标机是使用天嵌公司生产的TQ2440开发板,并安装嵌入式linux操作系统,用USB串口线和仿真器将宿主机与目标机连接起来进行通信;
一个简单的多线程并行程序(生产者与消费者问题)A.mc,该程序包括2个线程(生产线程Producer、消费者线程Consumer)、4个函数(lock()、unlock()、get()、put())、1个数据10和1个互斥信号量S,生产者线程先获取信号量S,向缓冲区中生产一个数据10,释放信号量S,然后消费者线程获取信号量S,从缓冲区中取走数据10,释放信号量S;
S1.1:宿主机中的工具ADC编辑上述的多线程并行程序A.mc,将其发送到TQ2440开发板中缓冲区A中;
S1.2:线程追踪控制模块扫描这个并行程序,定位其中所包含的4个横向关注点:lock()、unlock()、get()、put(),并在源程序A.mc中这些关注点的开始处插入Pointcut标志,分别为Pointcut lock()、Pointcut unlock()、Pointcut put()和Pointcut get();
S1.3:嵌入式开发工具ADC根据扫描到的4个横向关注点,利用面向方面机制新建一个Aspect函数,其中包括一个Before通知,Before通知内容为:记录运行线程、记录线程调用函数或方法、记录访问对象,然后,ADC将Aspect函数与源程序A.mc编织成可执行面向方面程序A.bin,通过JTAG工具烧录到TQ2440开发板的flash存储器中;
 S1.4:开发板中的嵌入式linux操作系统启动运行向方面程序A.bin,线程追踪检测模块监控A.bin的运行;当生产线程Producer调用lock()函数访问互斥信号量S时,线程追踪检测模块记录线程Producer、lock()和S执行信息,将这些执行信息组成一个线程记录TM1=<Producer,lock,S>;同理,当生产线程Producer调用put()函数向缓冲区中生产数据10、生产线程Producer调用unlock()函数访问互斥信号量S、消费者线程Consumer调用lock()函数访问互斥信号量S、消费者线程Consumer调用get()函数从缓冲区中取走数据10、消费者线程Consumer调用unlock()函数访问互斥信号量S时,可得其余线程记录TM2、 TM3、TM4、TM5、TM6;
S1.5:开发板中线程追踪控制模块将得到的6个线程记录TM1、TM2、 TM3、TM4、TM5、TM6通过的通信模块经过USB通信线路发送到宿主机中的指定的缓冲区B中保存;
S1.6:当程序A.bin一次执行完成后,线程追踪控制模块将缓冲区B中保存的线程记录TM1、TM2、 TM3、TM4、TM5、TM6按时间的先后顺序组建成一个线程队列TQ=<TM1,TM2,TM3,TM4,TM5,TM6>中;
S1.7:宿主机将缓冲区B中线程队列TQ输出到一个记事本文件out.txt;
S2:当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
当程序A.bin一次执行完成后,调试人员对比程序源代码A.mc中的所有关注点(lock()、unlock()、get()、put())与记录信息TQ=<TM1,TM2,TM3,TM4,TM5,TM6>来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,启动线程回放控制模块,进行并行程序A.bin执行路径信息的回放;
如果路径信息记录不完整,则再次运行并行程序A.bin,并重复上述线程队列TQ的产生过程,即重复执行步骤S1.4、S1.5、S1.6、S1.7;
S3:进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
S3.1:宿主机中线程回放控制模块将缓冲区B中线程队列TQ所包含的6个线程记录(TM1,TM2,TM3,TM4,TM5,TM6)信息按先进先出原则依次通过USB串口线发送到TQ2440开发板中的通信模块;
S3.2:开发板中的线程回放组件关闭线程追踪检测模块监控功能,防止在本次回放控制过程中再次对程序A.bin有关执行过程进行路径追踪,产生无用的线程记录。 
S3.3:TQ2440开发板中的线程回放组件首先读取第一个线程记录TM1中所包含的线程Producer、函数lock()和访问对象S的信息,并根据这些信息启动程序A.bin,运行线程Producer,调用函数lock()去访问互斥信号量S,从而实现了线程Producer的一次执行信息的回放;
S3.4:线程回放模块读依次取线程记录TM2,TM3,TM4,TM5,TM6,重复上述线程执行信息的回放过程;最终实现整个多线程并行程序A.bin一次执行过程中的所有线程执行路径回放,如图4所示。
表1  程序A.bin一次执行完成后产生线程队列TQ的描述
通过以上的实验表明,多线程并行程序运行过程中,只要出现线程调用函数或方法时,就会产生一个线程记录TM,程序一次执行完毕,会生成一个线程队列TQ,并以记事本文件out.txt输出;如果记录信息完整,则线程队列TQ中的线程记录TM按时间点次序进行回放,重演并行程序的执行过程,从而解决了嵌入式系统并行程序运行过程中路径难以追踪的问题,对于分析嵌入式系统中并行程序不确定性与程序错误无法再现的具有一定的作用。
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

Claims (5)

1.一种基于多线程嵌入式系统并行程序跟踪与回放方法,其特征在于:首先在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件;
当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段,利用嵌入式系统中程序路径回放软硬件框架,确保并行程序按照记事本文件中保存的路径重演。
2.根据权利要求1所述的基于多线程嵌入式系统并行程序跟踪与回放方法,其特征在于:所述基于多线程嵌入式系统并行程序跟踪与回放方法的具体步骤如下:
A、在并行程序执行阶段,利用嵌入式系统中程序运行路径追踪软硬件框架,记录多个线程执行路径信息,并生成一个记事本文件的具体步骤如下:
A1、首先宿主机中的嵌入式开发工具将程序源代码发送到缓冲区A中;
A2、宿主机中的线程追踪控制模块扫描此嵌入式程序源代码,并定位程序源代码中所有的横切关注点,此横切关注点包括除main函数之外的函数与方法,在所有横切关注点的开始处插入面向方面的切入点Pointcut标志;
A3、宿主机中的嵌入式开发工具使用Aspect机制新建一个包含Before通知横切关注点的Aspect函数,然后将Aspect函数与程序源代码编织成可执行面向方面程序,通过
工具烧录到目标机存储器中;
A4、嵌入式操作系统启动面向方面程序,同时线程追踪检测模块监控程序的运行;
当出现线程调用函数或方法时,则获取当前访问线程、当前函数或方法、调用对象信息,并将这些信息组合成一个线程记录TM;同理,当程序再次出现线程调用其他函数或方法时,可得到程序中其余的线程记录TM;
当没有出现线程调用函数或方法时,则线程追踪检测模块继续监控程序的运行;
A5、线程记录TM通过目标机中的通信模块经过USB串口线发送到宿主机中的缓冲区B中保存;
A6、程序一次执行完成后,宿主机中的线程追踪控制模块将缓冲区B中的所有线程记录TM按时间的先后顺序加入到线程队列TQ中;
A7、宿主机将线程队列TQ输出到记事本文件out.txt中;
B、当程序中所有的线程执行路径信息记录完成后,程序调试人员通过查看程序源代码中的关注点与记录信息来检查记事本文件out.txt中的路径信息记录是否完整;
如果路径信息记录完整,进入并行程序回放阶段;
如果路径信息记录不完整,则重复执行步骤A4、A5、A6、A7;
C、进入并行程序回放阶段,并行程序回放阶段中并行程序按照记事本文件out.txt中保存的路径重演的具体步骤如下:
C1、线程回放控制模块将缓冲区B中线程队列TQ所包含的线程记录TM信息按FIFO原则依次通过USB串口线发送到目标机中的通信模块;
C2、目标机中的线程回放组件关闭线程追踪检测模块监控功能,防止在回放过程中再次对程序执行过程进行追踪检测; 
C3、目标机中的线程回放组件读取并根据线程记录TM中所包含的线程、函数和访问对象的信息启动指定的线程,调用指定的函数去访问指定的对象,实现了该线程的执行信息的回放;
C4、目标机中的线程回放模块读取下一个线程记录TM,重复步骤C3,直到线程队列TQ所包含的最后一个线程记录TM,实现整个多线程并行程序一次执行的回放。
3.根据权利要求1所述的基于多线程嵌入式系统并行程序跟踪与回放方法,其特征在于:所述步骤A4中所述的线程记录TM是指在嵌入式系统中,处于运行态的线程一次执行过程所记录的相关执行信息,用一个三元组TM=<t,m,o>表示;
其中,t表示在任意时刻正在运行的线程,m表示线程t调用的函数或方法,o表示线程t所访问的对象类型,包括空Null、数据D、信号量S和消息M。
4.根据权利要求1所述的基于多线程嵌入式系统并行程序跟踪与回放方法,其特征在于:所述步骤A6中所述的线程队列TQ是指在嵌入式系统中,并行程序执行过程中所有线程记录TM所形成的一组序列,用TQ=<TM1,TM2,……TMn>表示;              
其中,TMn 表示系统中并行程序中一个线程记录,n表示线程运行的时间点。
5.根据权利要求4所述的基于多线程嵌入式系统并行程序跟踪与回放方法,其特征在于:所述TQ中TMn之间具有时间上的先后关系。
CN201410369935.7A 2014-07-31 2014-07-31 一种基于多线程嵌入式系统并行程序跟踪与回放方法 Active CN104216764B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410369935.7A CN104216764B (zh) 2014-07-31 2014-07-31 一种基于多线程嵌入式系统并行程序跟踪与回放方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410369935.7A CN104216764B (zh) 2014-07-31 2014-07-31 一种基于多线程嵌入式系统并行程序跟踪与回放方法

Publications (2)

Publication Number Publication Date
CN104216764A true CN104216764A (zh) 2014-12-17
CN104216764B CN104216764B (zh) 2017-09-12

Family

ID=52098289

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410369935.7A Active CN104216764B (zh) 2014-07-31 2014-07-31 一种基于多线程嵌入式系统并行程序跟踪与回放方法

Country Status (1)

Country Link
CN (1) CN104216764B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033368A (zh) * 2015-03-09 2016-10-19 北京大学 一种多核虚拟机确定性重演的方法
WO2016184305A1 (en) * 2015-05-15 2016-11-24 Huawei Technologies Co., Ltd. System and method for synthetic trace model
CN107015848A (zh) * 2016-01-21 2017-08-04 罗伯特·博世有限公司 用于监视和操控事件导向的操作系统中的准并行的实施线程的方法和设备
CN107592230A (zh) * 2017-09-22 2018-01-16 北京奇艺世纪科技有限公司 一种跟踪信息获取方法及装置
CN108021495A (zh) * 2016-11-03 2018-05-11 北京计算机技术及应用研究所 基于回放的代码调试方法
CN110062927A (zh) * 2016-12-21 2019-07-26 微软技术许可有限责任公司 可执行代码的并行重放
WO2020073200A1 (zh) * 2018-10-09 2020-04-16 华为技术有限公司 调试程序的方法和系统
CN113711190A (zh) * 2019-04-11 2021-11-26 微软技术许可有限责任公司 时间旅行调试追踪中的跨线程存储器索引
CN113785284A (zh) * 2019-04-30 2021-12-10 微软技术许可有限责任公司 基于历史调试追踪来标识数据不一致和数据争用

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103365776A (zh) * 2013-06-28 2013-10-23 中国科学院计算技术研究所 基于确定性重放的并行系统弱一致性的验证方法和系统
CN103425583A (zh) * 2013-08-25 2013-12-04 浙江大学 一种多dsp并行系统的跟踪和回放方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103365776A (zh) * 2013-06-28 2013-10-23 中国科学院计算技术研究所 基于确定性重放的并行系统弱一致性的验证方法和系统
CN103425583A (zh) * 2013-08-25 2013-12-04 浙江大学 一种多dsp并行系统的跟踪和回放方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
朱素霞等: "面向多核处理器的内存竞争记录研究综述", 《智能计算机与应用》 *
高岚等: "多核处理器并行程序的确定性重放研究", 《软件学报》 *

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033368A (zh) * 2015-03-09 2016-10-19 北京大学 一种多核虚拟机确定性重演的方法
CN106033368B (zh) * 2015-03-09 2019-02-22 北京大学 一种多核虚拟机确定性重演的方法
WO2016184305A1 (en) * 2015-05-15 2016-11-24 Huawei Technologies Co., Ltd. System and method for synthetic trace model
US10546075B2 (en) 2015-05-15 2020-01-28 Futurewei Technologies, Inc. System and method for a synthetic trace model
CN107015848B (zh) * 2016-01-21 2022-05-27 罗伯特·博世有限公司 用于监视操作系统中的准并行的实施线程的方法和设备
CN107015848A (zh) * 2016-01-21 2017-08-04 罗伯特·博世有限公司 用于监视和操控事件导向的操作系统中的准并行的实施线程的方法和设备
CN108021495A (zh) * 2016-11-03 2018-05-11 北京计算机技术及应用研究所 基于回放的代码调试方法
CN110062927A (zh) * 2016-12-21 2019-07-26 微软技术许可有限责任公司 可执行代码的并行重放
CN110062927B (zh) * 2016-12-21 2023-03-21 微软技术许可有限责任公司 用于可执行代码的并行重放的方法、系统和存储设备
CN107592230A (zh) * 2017-09-22 2018-01-16 北京奇艺世纪科技有限公司 一种跟踪信息获取方法及装置
CN107592230B (zh) * 2017-09-22 2023-02-21 北京奇艺世纪科技有限公司 一种跟踪信息获取方法及装置
WO2020073200A1 (zh) * 2018-10-09 2020-04-16 华为技术有限公司 调试程序的方法和系统
CN113711190A (zh) * 2019-04-11 2021-11-26 微软技术许可有限责任公司 时间旅行调试追踪中的跨线程存储器索引
CN113785284A (zh) * 2019-04-30 2021-12-10 微软技术许可有限责任公司 基于历史调试追踪来标识数据不一致和数据争用

Also Published As

Publication number Publication date
CN104216764B (zh) 2017-09-12

Similar Documents

Publication Publication Date Title
CN104216764A (zh) 一种基于多线程嵌入式系统并行程序跟踪与回放方法
Xu et al. Krace: Data race fuzzing for kernel file systems
Tan et al. SALSA: Analyzing Logs as StAte Machines.
CN104541244B (zh) 用于进行重放执行的方法和设备
US9304880B2 (en) System and method for multicore processing
Dean et al. Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds
TWI521438B (zh) 於多執行緒應用程式中偵測潛在存取錯誤之技術
US9355003B2 (en) Capturing trace information using annotated trace output
US9152389B2 (en) Trace generating unit, system, and program of the same
CN103729291A (zh) 一种基于同步关系的并行动态数据竞争检测系统
CN103729288A (zh) 一种嵌入式多核环境下应用程序的调试方法
CN102222016B (zh) 程序死锁检测方法和系统
US20120072758A1 (en) Analysis and visualization of cluster resource utilization
US8141082B2 (en) Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation
CN103714000A (zh) 一种面向敏感区域的嵌入式软件测试用例生成方法
Yu Combining symbolic execution and model checking to verify MPI programs
CN102135877B (zh) 自动化构建方法及装置
CN106844215B (zh) 一种基于约束求解的原子违背探测方法
CN109032929A (zh) 一种程序日志记录获取方法、装置及电子设备
CN105022692A (zh) 一种死锁检测验证方法
Zheng et al. On performance debugging of unnecessary lock contentions on multicore processors: A replay-based approach
CN110659172A (zh) 一种微处理器锁机制的指令级校验方法
Yuan et al. Raproducer: Efficiently diagnose and reproduce data race bugs for binaries via trace analysis
Wei et al. Using sample-based time series data for automated diagnosis of scalability losses in parallel programs
Lee et al. Replay debugging for multi-threaded embedded software

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant