<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計應(yīng)用 > TimeMachine -- 新一代的調(diào)試技術(shù)

          TimeMachine -- 新一代的調(diào)試技術(shù)

          ——
          作者:嚴(yán)永紅 時間:2007-11-01 來源:EEPW 收藏

          嚴(yán)永紅  上海祥佑數(shù)碼科技有限公司 研發(fā)部經(jīng)理

            隨著技術(shù)的發(fā)展,系統(tǒng)已變得越來越復(fù)雜。這同時體現(xiàn)在軟硬件設(shè)計兩個方面。在硬件上,一方面是時鐘頻率越來越高,另一方面是在同一系統(tǒng)中往往集成了多個CPU內(nèi)核,有同構(gòu)的,也有異構(gòu)的。在軟件上,各種復(fù)雜的操作系統(tǒng)也都被用到系統(tǒng)中,而且這些復(fù)雜的操作系統(tǒng)往往兼具了傳統(tǒng)實(shí)時操作系統(tǒng)和桌面系統(tǒng)的功能和優(yōu)點(diǎn)。所有這一切,都使系統(tǒng)的性能大大提高,但同時也對開發(fā)過程提出了嚴(yán)峻的挑戰(zhàn)。特別是在調(diào)試和測試方面。

            在這樣一個復(fù)雜的系統(tǒng)中,一個錯誤的出現(xiàn)往往牽扯到很多方面。一個簡單的經(jīng)常出現(xiàn)的錯誤可以在調(diào)試器中很容易被找到并修正,只要能順序地跟蹤代碼。而一個難以重現(xiàn)的錯誤往往占用我們大量時間去尋找產(chǎn)生錯誤的源頭。這樣的錯誤往往在用調(diào)試器調(diào)試時不會出現(xiàn)。我們只能一遍又一遍地在代碼中加入打印語句來收集錯誤出現(xiàn)的一些蛛絲馬跡,然后再猜測錯誤的源頭。這種方法往往只能達(dá)到事倍功半的效果,而且隨著軟硬件復(fù)雜程度的增加,消耗在這一過程中的實(shí)踐會成倍的增加。

            今天,隨著調(diào)試除錯技術(shù)的發(fā)展,新的技術(shù)不斷的引入,我們已經(jīng)能夠追蹤和控制這種復(fù)雜的錯誤。采用新技術(shù)的調(diào)試器可以讓系統(tǒng)在發(fā)生錯誤時停下,并從錯誤現(xiàn)象產(chǎn)生之處往回單步或直接運(yùn)行到錯誤的源頭。這樣不但能使你抓住這個錯誤,而且能重現(xiàn)整個產(chǎn)生錯誤的各個步驟,讓一個復(fù)雜的錯誤變得簡單、容易重現(xiàn)。例如Green Hills研制的新技術(shù)Time Machine。它集成了實(shí)時跟蹤、反向追蹤以及多核技術(shù)。

            實(shí)時跟蹤利用CPU內(nèi)部的一個端口,把CPU內(nèi)部的動態(tài)信息傳送出來。這些信息包括執(zhí)行過的指令,這些指令執(zhí)行時所訪問的內(nèi)存空間地址,以及所有這些動作的時間戳。所有這些信息都是在CPU全速運(yùn)行時送出來的,所以這是的信息都是和正常使用的情況相一致的?,F(xiàn)在很多CPU都帶有這樣的功能,ARM7, ARM9, ARM11, POWERPC-4XX, POWERPC-54XX, ColdFire等等。

            為了接收這些信息,需要一個設(shè)備,叫Trace Probe?,F(xiàn)在的Trace Probe可以存儲高達(dá)千兆字節(jié)的信息。在Trace分析軟件的幫助下,我們可以通過這些大量的數(shù)據(jù)重復(fù)系統(tǒng)的功能,重構(gòu)時間序列,定位錯誤和無效代碼。在這之前,一般是采用硬件邏輯分析儀來做這樣的工作,但邏輯分析儀只能采集到外部的地址和數(shù)據(jù)總線,并不能看到CPU內(nèi)部的信息,例如緩存的動作。

            

            Green Hills提供的高級的跟蹤分析工具還能在更高的層次上分析整個系統(tǒng)。例如在RTOS的層面上,Trace工具可以幫助用戶理解操作系統(tǒng)中各種事件和資源之間復(fù)雜的交互。例如,提供任務(wù)切換和中斷延時的精確測量,還能讓用戶檢查和分析在系統(tǒng)范圍內(nèi),事件和任務(wù)之間交互。各種事件如任務(wù)切換,異常,中斷,系統(tǒng)調(diào)用,用戶事件,人物狀態(tài)改變等等都可以用圖示化的方式在時間軸上圖示所示。

            

            反向追蹤是建立在Trace基礎(chǔ)上的一項新技術(shù)。當(dāng)Trace分析工具掌握了整個指令執(zhí)行的順序和當(dāng)時的內(nèi)存映像,這些信息可以用來作為調(diào)試的基礎(chǔ),而不用再真正連接到目標(biāo)板上。調(diào)試器把原始的指令翻譯為源代碼行,把內(nèi)存的值轉(zhuǎn)換為變量,這樣可以使你很容易看到每一個時間點(diǎn)上程序的狀態(tài),當(dāng)然你也可以讓產(chǎn)生錯誤的過程重新按原來的路徑走一遍。這時候,調(diào)試器不但可以讓你向前單步更新系統(tǒng)狀態(tài),也可以反向復(fù)原系統(tǒng),你甚至可以設(shè)置斷點(diǎn)和觀察點(diǎn),讓系統(tǒng)狀態(tài)復(fù)原到斷點(diǎn)或觀察點(diǎn)為止。

            反向復(fù)原使你可以更快地找到發(fā)生錯誤的源頭,而不僅僅知道發(fā)生錯誤現(xiàn)象的地方。你可以檢視各種可能的解決方法。因為你有完整的Trace數(shù)據(jù),你可以很容易地向前或向后調(diào)整程序的狀態(tài)。這是你很快找到那些用傳統(tǒng)很難找到的錯誤,因為傳統(tǒng)要求你在調(diào)試器中重現(xiàn)錯誤,這是你必須重啟系統(tǒng),并經(jīng)過一番復(fù)雜的操作才能達(dá)到錯誤點(diǎn)。這還算是好運(yùn)的。有些錯誤并不是經(jīng)常出現(xiàn),而是和一些偶然的因素相關(guān),這樣你在重現(xiàn)錯誤這個階段就要耗費(fèi)很多的時間。而且在調(diào)試過程中,一旦你不小心錯過了這個錯誤,一切都得重新開始。這樣的噩夢,每個工程師應(yīng)該都碰到過。但是有了的追蹤和反向追蹤技術(shù),一切變得不一樣了。你只要追蹤到一次錯誤,你就可以充分利用追蹤到的數(shù)據(jù),重復(fù)跟蹤指導(dǎo)錯誤找到并修正為止。

            一個復(fù)雜的系統(tǒng)往往會采用多核技術(shù),可能是跑在同樣主頻上的同種CPU,也可能是跑在不同主頻上的不同的CPU。不論是何種多核架構(gòu),CPU之間的同步和通信都對于軟件設(shè)計來講是一個考驗。如果軟件存在瑕疵,一個細(xì)微的時延就可能帶來巨大的結(jié)果差異。用傳統(tǒng)的來跟蹤這樣的問題是極其困難的,因為重現(xiàn)這樣的問題基本上是不可能的。但是,如果你可以把每個處理器上的實(shí)時數(shù)據(jù)都記錄下來的話,你就可以按順序恢復(fù)每一個處理器的狀態(tài)并找出處理器之間的交互關(guān)系。

            

            Green Hills的套件集成了一系列的調(diào)試和分析工具,用來幫助工程師發(fā)現(xiàn)錯誤、進(jìn)行測試和優(yōu)化程序。以可視化的方法呈現(xiàn)整個程序在時間上的各種行為。這些工具包括 Debugger、PathAnalyzer和Multi-Profile等等。PathAnalyzer以可視化的方法呈現(xiàn)了程序的堆棧在時間上的變化,這樣可以使你很容易看到程序在那個地方花了較多的時間。而且,你還可以很快看出程序各部分之間的交互關(guān)系。

            PathAnalyzer

            TimeMachine的基礎(chǔ)是要有記錄下來的大量實(shí)時跟蹤數(shù)據(jù),但還有很大一部分的CPU是沒有硬件跟蹤功能的。怎么辦?對于這樣的CPU,Green Hills給出了兩種解決辦法,一種叫In-Memory,一種叫TraceEdge。若要使用這兩種辦法,你需要使用Green Hills的編譯工具。一些額外的代碼會被插入到程序中,而這些額外代碼所產(chǎn)生的信息可以被Time Machine用來重構(gòu)整個程序的流程。In-Memory TimeMachine 和TraceEdge 與傳統(tǒng)的代碼植入方法相比有明顯的優(yōu)勢。第一,代碼植入是在Link的時候而不是在編譯時,這樣使用起來方便而且省時。第二,TraceEdge 一般僅僅插入一條指令,而In-Memory TimeMachine也只插入一條指令去調(diào)用一個很小的庫函數(shù)。這樣在空間和時間上都不會對目標(biāo)程序造成大的影響。第三,使用Green Hills先進(jìn)的Link技術(shù),可以使需要植入代碼的程序塊的數(shù)目最小化,而不是每一個程序塊都要植入。因為有些程序塊會有相關(guān)性。In-Memory TimeMachine 要使用一塊目標(biāo)系統(tǒng)的內(nèi)存在存放數(shù)據(jù),當(dāng)數(shù)據(jù)填滿后就被JTAG Probe或Debug Agent 送回PC。而TraceEdge不占用目標(biāo)系統(tǒng)內(nèi)存。而且有三種可選的配置,TraceEdge Bus, TraceEdge-PCI, TraceEdge-PMC。用TraceEdge Bus 植入的程序會向系統(tǒng)的一段無緩存的地址空間寫信息,這一段地址要有一個獨(dú)立的CS。Trace Probe會監(jiān)視這一段地址空間,并把抓到的信息存到保存起來。而TraceEdge-PCI 和TraceEdge-PMC 分別需要一塊 TraceEdge PCI卡和PMC卡插到目標(biāo)系統(tǒng)的PCI或PMC槽中,而Trace Probe直接和卡相連。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();