一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法
【專利摘要】本發(fā)明涉及一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,屬于并行程序調(diào)試與檢測(cè)【技術(shù)領(lǐng)域】。本發(fā)明在并行程序執(zhí)行階段,記錄多個(gè)線程執(zhí)行路徑信息,并生成一個(gè)記事本文件;當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整;如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟硬件框架,確保并行程序按照記事本文件中保存的路徑重演。本發(fā)明記錄并保存了多個(gè)線程程序執(zhí)行路徑信息。確保并行的多個(gè)線程程序按照記事本文件中保存的路徑信息進(jìn)行重演。能以較小的軟件開銷實(shí)現(xiàn)嵌入式系統(tǒng)中并行程序執(zhí)行路徑的跟蹤與回放。
【專利說明】一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,屬于并行程序 調(diào)試與檢測(cè)【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002] 調(diào)度、通信與同步控制等操作在嵌入式系統(tǒng)中并行程序經(jīng)常發(fā)生,且存在隨機(jī)性。 這些使得并行程序運(yùn)行結(jié)果具有不確定性與不可再現(xiàn)性。處于同一進(jìn)程中的多個(gè)線程共享 相同資源,即使程序初始條件相同,由于嵌入式系統(tǒng)中斷、操作延時(shí)以及噪聲等內(nèi)外環(huán)境因 素的干擾,很大程度上影響并改變了系統(tǒng)中并行程序的執(zhí)行和響應(yīng)時(shí)間,直接引起了線程 調(diào)度、通信與同步操作可控性降低,導(dǎo)致了系統(tǒng)存在不確定性,甚至在系統(tǒng)出現(xiàn)競(jìng)態(tài)條件。
[0003] 因此,在嵌入式系統(tǒng)開發(fā)過程中,為了消除系統(tǒng)具有的不確定性因素可能產(chǎn)生的 如競(jìng)態(tài)條件等系統(tǒng)可靠性問題,同時(shí)掌握程序運(yùn)行過程中的詳細(xì)的動(dòng)態(tài)信息,需要充分考 慮如何實(shí)現(xiàn)有效地追蹤嵌入式系統(tǒng)中的并行程序的執(zhí)行路徑并進(jìn)行回放,以便分析多線程 執(zhí)行過程中存在的問題,保障系統(tǒng)的安全穩(wěn)定的運(yùn)行。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明提供了一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,以用于解決 嵌入式系統(tǒng)中多線程并行程序運(yùn)行中表現(xiàn)出的不確定性和結(jié)果的不可再現(xiàn)等問題。
[0005] 本發(fā)明的技術(shù)方案是:一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,首 先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線程 執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0006] 所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除main函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過JTAG 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
[0007] 所述步驟A4中所述的線程記錄TM是指在嵌入式系統(tǒng)中,處于運(yùn)行態(tài)的線程一次 執(zhí)行過程所記錄的相關(guān)執(zhí)行信息,用一個(gè)三元組TM = <t, m, 〇>表示; 其中,t表示在任意時(shí)刻正在運(yùn)行的線程,m表示線程t調(diào)用的函數(shù)或方法,〇表示線程 t所訪問的對(duì)象類型,包括空Null、數(shù)據(jù)D、信號(hào)量S和消息M。
[0008] 所述步驟A6中所述的線程隊(duì)列TQ是指在嵌入式系統(tǒng)中,并行程序執(zhí)行過程中所 有線程記錄TM所形成的一組序列,用TQ =〈TM1,TM2,……TMn>表示; 其中,ΤΜη表示系統(tǒng)中并行程序中一個(gè)線程記錄,η表示線程運(yùn)行的時(shí)間點(diǎn)。
[0009] 所述TQ中ΤΜη之間具有時(shí)間上的先后關(guān)系。
[0010] 本發(fā)明的有益效果是:針對(duì)嵌入式系統(tǒng)中多線程并行程序,采用面向方面的技術(shù) 進(jìn)行掃描,通過嵌入式系統(tǒng)軟硬件框架,記錄并保存了多個(gè)線程程序執(zhí)行路徑信息。確保并 行的多個(gè)線程程序按照記事本文件中保存的路徑信息進(jìn)行重演。能以較小的軟件開銷實(shí)現(xiàn) 嵌入式系統(tǒng)中并行程序執(zhí)行路徑的跟蹤與回放,對(duì)嵌入式系統(tǒng)中的多線程數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)研 究,具有重要的參考價(jià)值。
【專利附圖】
【附圖說明】 toon] 圖1為本發(fā)明中的流程圖; 圖2為本發(fā)明中在并行程序執(zhí)行階段,記錄多個(gè)線程執(zhí)行路徑信息的嵌入式系統(tǒng)中程 序運(yùn)行路徑追蹤軟硬件框架結(jié)構(gòu)圖; 圖3為本發(fā)明中在并行程序回放階段,確保并行程序按照記事本文件中保存的路徑重 演的嵌入式系統(tǒng)中程序路徑回放軟硬件框架結(jié)構(gòu)圖; 圖4為本發(fā)明中實(shí)施例6產(chǎn)生的線程隊(duì)列TQ回放過程的樣式圖。
【具體實(shí)施方式】
[0012] 實(shí)施例1 :如圖1-3所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, 首先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線 程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0013] 實(shí)施例2 :如圖1-3所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, 首先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線 程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0014] 所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除main函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過JTAG 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
[0015] 實(shí)施例3 :如圖1-3所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, 首先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線 程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0016] 所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除maiη函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過JTAG 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
[0017] 所述步驟A4中所述的線程記錄TM是指在嵌入式系統(tǒng)中,處于運(yùn)行態(tài)的線程一次 執(zhí)行過程所記錄的相關(guān)執(zhí)行信息,用一個(gè)三元組TM = <t, m, 〇>表示; 其中,t表示在任意時(shí)刻正在運(yùn)行的線程,m表示線程t調(diào)用的函數(shù)或方法,〇表示線程 t所訪問的對(duì)象類型,包括空Null、數(shù)據(jù)D、信號(hào)量S和消息M。
[0018] 實(shí)施例4 :如圖1-3所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, 首先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線 程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0019] 所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除main函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過JTAG 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
[0020] 所述步驟A4中所述的線程記錄TM是指在嵌入式系統(tǒng)中,處于運(yùn)行態(tài)的線程一次 執(zhí)行過程所記錄的相關(guān)執(zhí)行信息,用一個(gè)三元組TM = <t, m, 〇>表示; 其中,t表示在任意時(shí)刻正在運(yùn)行的線程,m表示線程t調(diào)用的函數(shù)或方法,〇表示線程 t所訪問的對(duì)象類型,包括空Null、數(shù)據(jù)D、信號(hào)量S和消息M。
[0021] 所述步驟A6中所述的線程隊(duì)列TQ是指在嵌入式系統(tǒng)中,并行程序執(zhí)行過程中所 有線程記錄TM所形成的一組序列,用TQ =〈TM1,TM2,……TMn>表示; 其中,ΤΜη表示系統(tǒng)中并行程序中一個(gè)線程記錄,η表示線程運(yùn)行的時(shí)間點(diǎn)。
[0022] 實(shí)施例5 :如圖1-3所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, 首先在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線 程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
[0023] 所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、 在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除maiη函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過JTAG 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
[0024] 所述步驟A4中所述的線程記錄TM是指在嵌入式系統(tǒng)中,處于運(yùn)行態(tài)的線程一次 執(zhí)行過程所記錄的相關(guān)執(zhí)行信息,用一個(gè)三元組TM = <t, m, 〇>表示; 其中,t表示在任意時(shí)刻正在運(yùn)行的線程,m表示線程t調(diào)用的函數(shù)或方法,〇表示線程 t所訪問的對(duì)象類型,包括空Null、數(shù)據(jù)D、信號(hào)量S和消息Μ。
[0025] 所述步驟A6中所述的線程隊(duì)列TQ是指在嵌入式系統(tǒng)中,并行程序執(zhí)行過程中所 有線程記錄TM所形成的一組序列,用TQ =〈TM1,TM2,……TMn>表示; 其中,ΤΜη表示系統(tǒng)中并行程序中一個(gè)線程記錄,η表示線程運(yùn)行的時(shí)間點(diǎn)。
[0026] 所述TQ中ΤΜη之間具有時(shí)間上的先后關(guān)系。
[0027] 實(shí)施例6 :如圖1-4所示,一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法, S1 :在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件; 宿主機(jī)操作系統(tǒng)為Windows ΧΡ系統(tǒng),嵌入式開發(fā)工具為ADC,目標(biāo)機(jī)是使用天嵌公司 生產(chǎn)的T Q 2 4 4 0開發(fā)板,并安裝嵌入式linux操作系統(tǒng),用USB串口線和仿真器將宿主 機(jī)與目標(biāo)機(jī)連接起來進(jìn)行通信; 一個(gè)簡(jiǎn)單的多線程并行程序(生產(chǎn)者與消費(fèi)者問題)A. mc,該程序包括2個(gè)線程(生產(chǎn)線 程 Producer、消費(fèi)者線程 Consumer)、4 個(gè)函數(shù)(lock()、unlock()、get()、put() )、1 個(gè)數(shù)據(jù) 10和1個(gè)互斥信號(hào)量S,生產(chǎn)者線程先獲取信號(hào)量S,向緩沖區(qū)中生產(chǎn)一個(gè)數(shù)據(jù)10,釋放信 號(hào)量S,然后消費(fèi)者線程獲取信號(hào)量S,從緩沖區(qū)中取走數(shù)據(jù)10,釋放信號(hào)量S ; SI. 1 :宿主機(jī)中的工具ADC編輯上述的多線程并行程序A.mc,將其發(fā)送到T Q 2 4 4 0開發(fā)板中緩沖區(qū)A中; S1. 2:線程追蹤控制模塊掃描這個(gè)并行程序,定位其中所包含的4個(gè)橫向關(guān)注點(diǎn): lock()、unlock()、get ()、put (),并在源程序A. me中這些關(guān)注點(diǎn)的開始處插入Pointcut標(biāo) 志,分別為 Pointcut lock ()、Pointcut unlock ()、Pointcut put ()和 Pointcut get (); SI. 3 :嵌入式開發(fā)工具ADC根據(jù)掃描到的4個(gè)橫向關(guān)注點(diǎn),利用面向方面機(jī)制新建一個(gè) Aspect函數(shù),其中包括一個(gè)Before通知,Before通知內(nèi)容為:記錄運(yùn)行線程、記錄線程調(diào)用 函數(shù)或方法、記錄訪問對(duì)象,然后,ADC將Aspect函數(shù)與源程序A. me編織成可執(zhí)行面向方 面程序A. bin,通過JTAG工具燒錄到T Q 2 4 4 0開發(fā)板的flash存儲(chǔ)器中; S1.4 :開發(fā)板中的嵌入式linux操作系統(tǒng)啟動(dòng)運(yùn)行向方面程序A.bin,線程追蹤檢測(cè) 模塊監(jiān)控A. bin的運(yùn)行;當(dāng)生產(chǎn)線程Producer調(diào)用lock ()函數(shù)訪問互斥信號(hào)量S時(shí),線程 追蹤檢測(cè)模塊記錄線程Producer、lock〇和S執(zhí)行信息,將這些執(zhí)行信息組成一個(gè)線程記 錄TM1 =〈Producer, lock, S> ;同理,當(dāng)生產(chǎn)線程Producer調(diào)用put ()函數(shù)向緩沖區(qū)中生 產(chǎn)數(shù)據(jù)10、生產(chǎn)線程Producer調(diào)用unlockO函數(shù)訪問互斥信號(hào)量S、消費(fèi)者線程Consumer 調(diào)用lock〇函數(shù)訪問互斥信號(hào)量S、消費(fèi)者線程Consumer調(diào)用get〇函數(shù)從緩沖區(qū)中取走 數(shù)據(jù)10、消費(fèi)者線程Consumer調(diào)用unlockO函數(shù)訪問互斥信號(hào)量S時(shí),可得其余線程記錄 TM2、TM3、TM4、TM5、TM6; S1. 5 :開發(fā)板中線程追蹤控制模塊將得到的6個(gè)線程記錄TM1、TM2、TM3、TM4、TM5、TM6 通過的通信模塊經(jīng)過USB通信線路發(fā)送到宿主機(jī)中的指定的緩沖區(qū)B中保存; S1. 6 :當(dāng)程序A. bin-次執(zhí)行完成后,線程追蹤控制模塊將緩沖區(qū)B中保存的線程記錄 TM1、TM2、TM3、TM4、TM5、TM6按時(shí)間的先后順序組建成一個(gè)線程隊(duì)列TQ = <TM1,TM2,TM3, TM4, TM5, TM6> 中; SI. 7 :宿主機(jī)將緩沖區(qū)B中線程隊(duì)列TQ輸出到一個(gè)記事本文件out. txt ; 52 :當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代 碼中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 當(dāng)程序A. bin -次執(zhí)行完成后,調(diào)試人員對(duì)比程序源代碼A. me中的所有關(guān)注點(diǎn) (lock()、unlock()、get ()、put ())與記錄信息 TQ =〈TM1,TM2, TM3, TM4, TM5, TM6> 來檢查 記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,啟動(dòng)線程回放控制模塊,進(jìn)行并行程序A. bin執(zhí)行路徑信息 的回放; 如果路徑信息記錄不完整,則再次運(yùn)行并行程序A. bin,并重復(fù)上述線程隊(duì)列TQ的產(chǎn) 生過程,即重復(fù)執(zhí)行步驟S1. 4、S1. 5、S1. 6、S1. 7 ; 53 :進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt 中保存的路徑重演的具體步驟如下: S3. 1 :宿主機(jī)中線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的6個(gè)線程記 錄(TM1,TM2, TM3, TM4, TM5, TM6)信息按先進(jìn)先出原則依次通過USB串口線發(fā)送到T Q 2 4 4 0開發(fā)板中的通信模塊; S3. 2 :開發(fā)板中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在本次回放控 制過程中再次對(duì)程序A. bin有關(guān)執(zhí)行過程進(jìn)行路徑追蹤,產(chǎn)生無用的線程記錄。
[0028] S3. 3 : T Q 2 4 4 0開發(fā)板中的線程回放組件首先讀取第一個(gè)線程記錄TM1中所 包含的線程Producer、函數(shù)lock()和訪問對(duì)象S的信息,并根據(jù)這些信息啟動(dòng)程序A. bin, 運(yùn)行線程Producer,調(diào)用函數(shù)lock〇去訪問互斥信號(hào)量S,從而實(shí)現(xiàn)了線程Producer的一 次執(zhí)行信息的回放; S3. 4 :線程回放模塊讀依次取線程記錄TM2, TM3, TM4, TM5, TM6,重復(fù)上述線程執(zhí)行信 息的回放過程;最終實(shí)現(xiàn)整個(gè)多線程并行程序A. bin -次執(zhí)行過程中的所有線程執(zhí)行路徑 回放,如圖4所示。
[0029] 表1程序A. bin -次執(zhí)行完成后產(chǎn)生線程隊(duì)列TQ的描述
【權(quán)利要求】
1. 一種基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,其特征在于:首先在并行程 序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè)線程執(zhí)行路徑信 息,并生成一個(gè)記事本文件; 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼中 的關(guān)注點(diǎn)與記錄信息來檢查記事本文件中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段,利用嵌入式系統(tǒng)中程序路徑回放軟 硬件框架,確保并行程序按照記事本文件中保存的路徑重演。
2. 根據(jù)權(quán)利要求1所述的基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,其特征在 于:所述基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法的具體步驟如下: A、 在并行程序執(zhí)行階段,利用嵌入式系統(tǒng)中程序運(yùn)行路徑追蹤軟硬件框架,記錄多個(gè) 線程執(zhí)行路徑信息,并生成一個(gè)記事本文件的具體步驟如下: A1、首先宿主機(jī)中的嵌入式開發(fā)工具將程序源代碼發(fā)送到緩沖區(qū)A中; A2、宿主機(jī)中的線程追蹤控制模塊掃描此嵌入式程序源代碼,并定位程序源代碼中所 有的橫切關(guān)注點(diǎn),此橫切關(guān)注點(diǎn)包括除maiη函數(shù)之外的函數(shù)與方法,在所有橫切關(guān)注點(diǎn)的 開始處插入面向方面的切入點(diǎn)Pointcut標(biāo)志; A3、宿主機(jī)中的嵌入式開發(fā)工具使用Aspect機(jī)制新建一個(gè)包含Before通知橫切關(guān)注 點(diǎn)的Aspect函數(shù),然后將Aspect函數(shù)與程序源代碼編織成可執(zhí)行面向方面程序,通過 工具燒錄到目標(biāo)機(jī)存儲(chǔ)器中; A4、嵌入式操作系統(tǒng)啟動(dòng)面向方面程序,同時(shí)線程追蹤檢測(cè)模塊監(jiān)控程序的運(yùn)行; 當(dāng)出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則獲取當(dāng)前訪問線程、當(dāng)前函數(shù)或方法、調(diào)用對(duì)象信 息,并將這些信息組合成一個(gè)線程記錄TM ;同理,當(dāng)程序再次出現(xiàn)線程調(diào)用其他函數(shù)或方 法時(shí),可得到程序中其余的線程記錄TM ; 當(dāng)沒有出現(xiàn)線程調(diào)用函數(shù)或方法時(shí),則線程追蹤檢測(cè)模塊繼續(xù)監(jiān)控程序的運(yùn)行; A5、線程記錄TM通過目標(biāo)機(jī)中的通信模塊經(jīng)過USB串口線發(fā)送到宿主機(jī)中的緩沖區(qū)B 中保存; A6、程序一次執(zhí)行完成后,宿主機(jī)中的線程追蹤控制模塊將緩沖區(qū)B中的所有線程記 錄TM按時(shí)間的先后順序加入到線程隊(duì)列TQ中; A7、宿主機(jī)將線程隊(duì)列TQ輸出到記事本文件out. txt中; B、 當(dāng)程序中所有的線程執(zhí)行路徑信息記錄完成后,程序調(diào)試人員通過查看程序源代碼 中的關(guān)注點(diǎn)與記錄信息來檢查記事本文件out. txt中的路徑信息記錄是否完整; 如果路徑信息記錄完整,進(jìn)入并行程序回放階段; 如果路徑信息記錄不完整,則重復(fù)執(zhí)行步驟A4、A5、A6、A7 ; C、 進(jìn)入并行程序回放階段,并行程序回放階段中并行程序按照記事本文件out. txt中 保存的路徑重演的具體步驟如下: C1、線程回放控制模塊將緩沖區(qū)B中線程隊(duì)列TQ所包含的線程記錄TM信息按FIFO原 則依次通過USB串口線發(fā)送到目標(biāo)機(jī)中的通信模塊; C2、目標(biāo)機(jī)中的線程回放組件關(guān)閉線程追蹤檢測(cè)模塊監(jiān)控功能,防止在回放過程中再 次對(duì)程序執(zhí)行過程進(jìn)行追蹤檢測(cè); C3、目標(biāo)機(jī)中的線程回放組件讀取并根據(jù)線程記錄TM中所包含的線程、函數(shù)和訪問對(duì) 象的信息啟動(dòng)指定的線程,調(diào)用指定的函數(shù)去訪問指定的對(duì)象,實(shí)現(xiàn)了該線程的執(zhí)行信息 的回放; C4、目標(biāo)機(jī)中的線程回放模塊讀取下一個(gè)線程記錄TM,重復(fù)步驟C3,直到線程隊(duì)列TQ 所包含的最后一個(gè)線程記錄TM,實(shí)現(xiàn)整個(gè)多線程并行程序一次執(zhí)行的回放。
3. 根據(jù)權(quán)利要求1所述的基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,其特征在 于:所述步驟A4中所述的線程記錄TM是指在嵌入式系統(tǒng)中,處于運(yùn)行態(tài)的線程一次執(zhí)行過 程所記錄的相關(guān)執(zhí)行信息,用一個(gè)三元組TM = <t, m, 〇>表示; 其中,t表示在任意時(shí)刻正在運(yùn)行的線程,m表示線程t調(diào)用的函數(shù)或方法,〇表示線程 t所訪問的對(duì)象類型,包括空Null、數(shù)據(jù)D、信號(hào)量S和消息M。
4. 根據(jù)權(quán)利要求1所述的基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,其特征在 于:所述步驟A6中所述的線程隊(duì)列TQ是指在嵌入式系統(tǒng)中,并行程序執(zhí)行過程中所有線程 記錄TM所形成的一組序列,用TQ =〈TM1,TM2,……TMn>表示; 其中,ΤΜη表示系統(tǒng)中并行程序中一個(gè)線程記錄,η表示線程運(yùn)行的時(shí)間點(diǎn)。
5. 根據(jù)權(quán)利要求4所述的基于多線程嵌入式系統(tǒng)并行程序跟蹤與回放方法,其特征在 于:所述TQ中ΤΜη之間具有時(shí)間上的先后關(guān)系。
【文檔編號(hào)】G06F11/36GK104216764SQ201410369935
【公開日】2014年12月17日 申請(qǐng)日期:2014年7月31日 優(yōu)先權(quán)日:2014年7月31日
【發(fā)明者】張晶, 潘有順, 陳沫良, 張果, 崔毅, 嚴(yán)涵, 沈江炎, 容會(huì) 申請(qǐng)人:昆明理工大學(xué)