專利名稱:通過修改跟蹤操作減少跟蹤開銷的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)處理的領域,并且特別涉及程序行為監(jiān)視的領域。
背景技術:
數(shù)據(jù)處理設備變得越來越復雜,并且因此,在未提取和分析大量數(shù)據(jù)的情況下,為 優(yōu)化或故障查找而分析其性能變得越來越困難。 —種用于監(jiān)視程序行為的熟知技術是收集可由硬件或插入程序中的代碼生成的 跟蹤數(shù)據(jù)。因此,在響應跟蹤調(diào)用的程序執(zhí)行的某些點上,將輸出對應于跟蹤調(diào)用的跟蹤數(shù) 據(jù)。此跟蹤數(shù)據(jù)可指示在該點的處理器的狀態(tài)、特定變量的值和/或此跟蹤調(diào)用發(fā)生的時 間。 然而,以此方式監(jiān)視程序的行為有多個缺陷。將跟蹤調(diào)用插入程序中能改變其行 為和使其行為失真,而插入的代碼增大了程序的大小和它執(zhí)行所用的時間。此外,以此方式 會很容易生成大量數(shù)據(jù),而通常用于從硬件傳送跟蹤數(shù)據(jù)的帶寬是有限的。
最好是能夠在仍收集有用的跟蹤數(shù)據(jù)的同時減輕這些缺點中的至少一些。
發(fā)明內(nèi)容
本發(fā)明的第一方面是提供一種編譯計算機程序的方法,所述計算機程序包括用于 觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,所述編譯的方法包括以下 步驟將所述計算機程序變換成形成所述計算機程序的中間版本的代碼;分析所述變換的 代碼;將所述跟蹤操作的至少一些替代為修改的跟蹤操作;將所述代碼變換成適合在數(shù)據(jù) 處理系統(tǒng)上執(zhí)行的代碼;以及生成將所述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作 的轉(zhuǎn)換數(shù)據(jù)。 本發(fā)明認識到,當計算機程序被編譯以生成代碼的表示或中間版本時,至少一些 代碼的排序被更改。在計算機程序代碼包含跟蹤操作的情況下,則這些跟蹤操作也可在代 碼內(nèi)移動,并且這可更改其效力。本發(fā)明認識到,代碼的此中間版本的分析使得能夠識別和 在適當之處去除可能是由于代碼的重新組織而產(chǎn)生的跟蹤操作中的冗余。因此,在分析之 后,某些識別的跟蹤操作被替代為修改的跟蹤操作,例如,生成冗余數(shù)據(jù)的跟蹤操作可以被 去除或與其它跟蹤操作合并。代碼的分析和在此階段修改跟蹤操作能促使代碼內(nèi)的跟蹤操 作的數(shù)量減少,使它更類似于無任何跟蹤操作的不測試的代碼,它也可減少需要處理的跟 蹤操作的量,由此減少目標系統(tǒng)的處理開銷,并且它可減少生成的冗余數(shù)據(jù)量,從而減少輸 出跟蹤數(shù)據(jù)所需的帶寬。本發(fā)明也認識到,跟蹤操作的修改可能使分析跟蹤數(shù)據(jù)的系統(tǒng)不 能理解它們,并且因此,它生成指示已如何修改跟蹤操作的轉(zhuǎn)換數(shù)據(jù)。此轉(zhuǎn)換數(shù)據(jù)允許修改 的跟蹤操作輸出的跟蹤數(shù)據(jù)與它們替代的跟蹤操作相關,并且因此,修改的代碼輸出通過 使用轉(zhuǎn)換數(shù)據(jù)能理解的跟蹤數(shù)據(jù)。因此,本發(fā)明允許在編譯器階段修改跟蹤操作,使得能夠 更有效地生成和輸出跟蹤數(shù)據(jù)。 在一些實施例中,所述方法分析所述變換的代碼以確定所述至少一些跟蹤操作,其替代為修改的跟蹤操作將減少所述跟蹤操作的執(zhí)行的成本,并且依據(jù)所述分析來選擇要 替代的所述至少一些跟蹤操作。 在分析如何修改跟蹤操作時,本發(fā)明的實施例尋求減少跟蹤操作的執(zhí)行的成本, 并由此提高在執(zhí)行跟蹤時跟蹤的效率。通過在編譯器階段修改跟蹤操作,不但能生成更少 的跟蹤數(shù)據(jù),而且能減少跟蹤操作的數(shù)量,這能減少處理能力、使用的能量和執(zhí)行時間。因 此,本發(fā)明尋求減少與跟蹤相關聯(lián)的成本,這些成本可包括生成的跟蹤數(shù)據(jù)量、執(zhí)行的跟蹤 操作的數(shù)量、執(zhí)行時間和生成跟蹤所需的功率和能量。 在一些實施例中,所述替代步驟包括將至少所述跟蹤操作的兩個替代為至少一個 修改的跟蹤操作。 雖然修改的跟蹤操作可替代單個原跟蹤操作,但修改的跟蹤操作可能生成更少跟 蹤數(shù)據(jù),在一些實施例中,修改的跟蹤操作是通過合并幾個跟蹤操作來生成的。因此,兩個 跟蹤操作可替代為單個修改的跟蹤操作,或者多個跟蹤操作可替代為更少的修改的跟蹤操 作。這減少了執(zhí)行的跟蹤操作的數(shù)量,并且在被替代的幾個跟蹤操作的一些操作輸出相同 數(shù)據(jù)時,也可減少輸出的跟蹤數(shù)據(jù)量。 在一些實施例中,所述分析步驟包括識別代碼的所述中間版本的基本塊內(nèi)的至少 兩個跟蹤操作,所述基本塊是代碼塊,在其內(nèi)如果執(zhí)行一個指令,則將執(zhí)行所述指令的所有
指令,并且所述替代步驟包括將所述至少兩個跟蹤操作替代為所述修改的跟蹤操作的至少一個。 能合并的跟蹤操作的示例是在代碼的中間版本的基本塊內(nèi)的跟蹤操作?;緣K是 代碼塊,在其中如果執(zhí)行一個指令,則將執(zhí)行所有指令。因此,在同一基本塊中存在的跟蹤 操作將全部被執(zhí)行,并因此能合并成更少的跟蹤操作。 在一些實施例中,所述替代步驟包括將所述跟蹤操作的至少一個替代為至少一個 修改的跟蹤操作和相關聯(lián)的時間戳校正數(shù)據(jù),所述時間戳校正數(shù)據(jù)指示相對于所述修改的 跟蹤操作的執(zhí)行,所述至少一些跟蹤操作何時將執(zhí)行。 跟蹤數(shù)據(jù)可包含時間戳,指示執(zhí)行跟蹤操作的時間。因此,如果原跟蹤操作將包含
時間戳數(shù)據(jù),則與修改的跟蹤操作相關聯(lián)的轉(zhuǎn)換數(shù)據(jù)也包含時間戳數(shù)據(jù),指示相對于修改
的跟蹤操作的執(zhí)行,修改的跟蹤操作替代的原跟蹤操作將何時執(zhí)行,會是有利的。 在一些實施例中,生成轉(zhuǎn)換數(shù)據(jù)的所述步驟包括生成在所述跟蹤操作的每個和替
代它們的所述修改的跟蹤操作的執(zhí)行之間周期的數(shù)量的估計。 計算相對于修改的跟蹤操作,原跟蹤操作何時將執(zhí)行的一種方式是估計操作之間 的周期的數(shù)量并在轉(zhuǎn)換數(shù)據(jù)中包括此估計。因此,如果修改的跟蹤操作包括時間戳數(shù)據(jù),則 能做出各個跟蹤操作原本將何時產(chǎn)生其跟蹤數(shù)據(jù)的估計。 在一些實施例中,所述替代步驟包括將所述跟蹤操作的至少一個替代為修改的跟
蹤操作,該修改的跟蹤操作輸出的數(shù)據(jù)比所述至少一個跟蹤操作輸出的更少。 修改的跟蹤操作替代其它跟蹤操作以便減少跟蹤操作的執(zhí)行的成本,并且這可以
是通過輸出比原跟蹤操作所輸出的更少的數(shù)據(jù)來實現(xiàn)。在中間版本階段代碼的分析可識別
一些輸出的數(shù)據(jù)是冗余數(shù)據(jù),即,與已經(jīng)輸出的數(shù)據(jù)是相同的數(shù)據(jù),或能從已經(jīng)輸出的數(shù)據(jù)
計算得出的數(shù)據(jù)。如果情況是這樣,此數(shù)據(jù)無需輸出(假如生成的轉(zhuǎn)換數(shù)據(jù)使得它能夠從
輸出的數(shù)據(jù)推導出)。
在一些實施例中,所述替代步驟包括將所述跟蹤操作的至少一個替代為修改的跟 蹤操作,該修改的跟蹤操作需要所述計算機程序執(zhí)行的處理步驟比所述至少一個跟蹤操作 需要的更少。 能減少的另一成本是由于處理步驟產(chǎn)生的成本,并且修改的跟蹤操作可能使得它
需要計算機執(zhí)行的處理步驟比它替代的跟蹤操作更少。例如,跟蹤操作可能需要輸出兩個
變量的乘積,這意味著目標系統(tǒng)將需要計算此值。如果目標系統(tǒng)上的處理能力是非常珍貴
的,則單獨輸出兩個值并在分析跟蹤數(shù)據(jù)的系統(tǒng)上計算乘積會是有利的。 在一些實施例中,所述跟蹤操作的至少一個包括標記數(shù)據(jù),指示在所述跟蹤操作
被替代為所述修改的跟蹤操作之一時能移動的程度,在確定要替代的跟蹤操作時,所述替
代的步驟響應所述標記數(shù)據(jù)。 標記數(shù)據(jù)可能與跟蹤操作相關聯(lián)。此標記數(shù)據(jù)是向編譯器提供提示或指令的數(shù) 據(jù),并且在代碼的最終編譯版本中不存在。此標記數(shù)據(jù)可包括在修改期間能移動跟蹤操作 的程度的數(shù)據(jù)指示。當分析代碼的中間版本并將跟蹤操作替代為修改的跟蹤操作時,考慮 此標記數(shù)據(jù),使得替代具有標記數(shù)據(jù)的原跟蹤操作的修改的跟蹤操作不會遠于此原跟蹤操 作允許的量。 在一些實施例中,所述計算機程序包括屏障(barrier)指示,跟蹤操作不能跨越 所述屏障指示移動來形成修改的跟蹤操作。 作為對編譯器的指示或指令存在的其它信息可能是屏障指示,這些指示能采用多 種形式,并且可例如是指令。這些指示能插入程序中以指示編譯器不要跨越它們移動跟蹤 操作。類似于標記數(shù)據(jù),這些指示從編譯的代碼的最終版本中刪除,但由編譯器用于幫助它 以正確的方式重新組織代碼。 在一些實施例中,所述方法包括在所述變換的程序內(nèi)包括代碼以用于控制執(zhí)行所 述代碼的處理器輸出所述轉(zhuǎn)換數(shù)據(jù)的又一步驟。 生成的轉(zhuǎn)換數(shù)據(jù)與變換的代碼一起輸出是可以的,在這種情況下,變換的代碼將 包括控制執(zhí)行代碼的處理器輸出轉(zhuǎn)換數(shù)據(jù)的步驟。這樣,轉(zhuǎn)換代碼將經(jīng)執(zhí)行編譯的代碼的 處理器可供分析器使用。在其它實施例中,轉(zhuǎn)換數(shù)據(jù)以不同方式變得可用于分析器,例如, 經(jīng)數(shù)據(jù)存儲。此后一種方式可以是其中編譯代碼和分析跟蹤數(shù)據(jù)的設備是相同設備的情 況。備選地,轉(zhuǎn)換數(shù)據(jù)可嵌入在程序二進制碼內(nèi),但在執(zhí)行時不輸出。例如,它可以是與從 分析跟蹤數(shù)據(jù)的分析器上的二進制碼的單獨副本讀取的二進制碼相關聯(lián)的調(diào)試表的形式。
在一些實施例中,所述方法還包括兩個步驟在將所述至少一些跟蹤操作替代為 修改的跟蹤操作的所述步驟后,分析所述修改的代碼;將所述跟蹤操作的至少一些或修改 的跟蹤操作替代為修改的跟蹤操作;以及重復所述兩個步驟,直至分析所述修改的代碼的 所述步驟指示,當與所述以前修改的代碼相比時,所述修改的代碼未顯著減少所述跟蹤操 作的執(zhí)行的成本。 跟蹤操作的修改能以遞歸方式完成,以便它們被修改,并且修改的代碼被分析,并 且進行進一步修改,直至進一步修改不再產(chǎn)生顯著成本節(jié)約的點為止。應注意的是,在進一 步的步驟中替代的跟蹤操作可以是原跟蹤操作和/或在以前步驟中已經(jīng)修改的那些操作。 通過比較需要的處理步驟的數(shù)量并發(fā)現(xiàn)它們并未減少,或者比較執(zhí)行的速度并發(fā)現(xiàn)這未被 減少大于預定的量(這被判定為是不重要的),則能夠斷定進一步修改不再產(chǎn)生顯著成本節(jié)約的點。 本發(fā)明的第二方面提供一種監(jiān)視程序行為的方法,包括接收跟蹤數(shù)據(jù)和轉(zhuǎn)換數(shù) 據(jù),所述跟蹤數(shù)據(jù)是響應由正在被監(jiān)視的所述程序執(zhí)行的跟蹤操作而輸出的跟蹤數(shù)據(jù),所 述轉(zhuǎn)換數(shù)據(jù)包括對應于所述跟蹤操作的至少一些的數(shù)據(jù),所述跟蹤操作的所述至少一些是 修改的跟蹤操作;識別響應所述修改的跟蹤操作而生成的跟蹤數(shù)據(jù);以及使用所述轉(zhuǎn)換數(shù) 據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成轉(zhuǎn)換的跟蹤數(shù)據(jù),所述轉(zhuǎn)換的跟蹤數(shù)據(jù)表示由所述程 序在它被修改前的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù)。 通過使用也由本發(fā)明的第一方面生成的轉(zhuǎn)換數(shù)據(jù),能理解和分析已根據(jù)本發(fā)明的 第一方面編譯的程序生成的跟蹤數(shù)據(jù)。因此,修改的跟蹤操作生成的跟蹤數(shù)據(jù)被識別,并且 相關的轉(zhuǎn)換數(shù)據(jù)被發(fā)現(xiàn),并且修改的跟蹤數(shù)據(jù)隨后能被重新構建以形成表示由程序在它被 修改前的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù)的跟蹤數(shù)據(jù)。隨后,能分析此跟蹤 數(shù)據(jù)。 雖然表示由程序在它被修改前的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù) 的轉(zhuǎn)換的跟蹤數(shù)據(jù)能夠采用多種形式(假設轉(zhuǎn)換的跟蹤數(shù)據(jù)與原跟蹤數(shù)據(jù)足夠類似,以使 得它能夠由預期原數(shù)據(jù)的工具來分析),但在一些實施例中,除可能稍微不同的時間戳外, 它在所有方面與原跟蹤數(shù)據(jù)相同,而且在一些實施例中,可能可保證這些時間戳也是相等 的。 在一些實施例中,方法包括使用所述跟蹤數(shù)據(jù)來分析所述程序行為的又一步驟。
—旦跟蹤數(shù)據(jù)已修正成類似于原跟蹤數(shù)據(jù)的形式,它便能夠由預期原跟蹤數(shù)據(jù)的 常規(guī)工具來分析,或者由用于分析此特定編譯的代碼的工具來分析。 在一些實施例中,從正在被監(jiān)視的所述系統(tǒng)接收所述轉(zhuǎn)換數(shù)據(jù)與所述跟蹤數(shù)據(jù), 而在其它實施例中,轉(zhuǎn)換數(shù)據(jù)存儲在分析系統(tǒng)上,或者它放入在準許的位置的文件中,或者 放入可執(zhí)行文件的節(jié)(section)中,或者它能夠是分析系統(tǒng)引用的程序的存儲器映像的一 部分。 本發(fā)明的第三方面提供一種分析在嵌入式系統(tǒng)上執(zhí)行的計算機程序的行為的方
法,所述計算機程序包括用于觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操
作,所述方法包括以下步驟將所述計算機程序變換成形成所述計算機程序的中間版本的
代碼;分析所述變換的代碼;將所述跟蹤操作的至少一些替代為修改的跟蹤操作;將所述
代碼變換成適合在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼;以及生成將所述修改的跟蹤操作關聯(lián)到它
們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù),以允許解釋響應所述修改的跟蹤操作而輸出的跟蹤數(shù)
據(jù);將所述變換的代碼輸出到所述數(shù)據(jù)處理系統(tǒng);將所述轉(zhuǎn)換數(shù)據(jù)輸出到程序監(jiān)視設備;
在所述數(shù)據(jù)處理系統(tǒng)上執(zhí)行所述變換的代碼;在所述程序監(jiān)視設備從所述數(shù)據(jù)處理系統(tǒng)接
收跟蹤數(shù)據(jù);識別所述跟蹤數(shù)據(jù)內(nèi)響應所述修改的跟蹤操作而生成的跟蹤數(shù)據(jù);使用所述
轉(zhuǎn)換數(shù)據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成表示由所述程序在它被修改前的版本中存在
的跟蹤操作原本將輸出的跟蹤數(shù)據(jù)的跟蹤數(shù)據(jù);使用所述跟蹤數(shù)據(jù)來分析所述程序行為。 代碼的編譯及隨后對生成的跟蹤數(shù)據(jù)的分析能在單個設備上執(zhí)行。 本發(fā)明的第四方面提供一種用于控制數(shù)據(jù)處理設備以執(zhí)行本發(fā)明第一方面的方
法的步驟的計算機程序。 本發(fā)明的第五方面提供一種用于控制數(shù)據(jù)處理設備以執(zhí)行本發(fā)明第二方面的方法的步驟的計算機程序。 本發(fā)明的第六方面提供一種用于編譯計算機程序的編譯器,該計算機程序包括用
于觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,所述編譯器包括變換
電路,用于將所述計算機程序變換成形成所述計算機程序的中間版本的代碼;分析電路,用
于分析所述變換的代碼;其中所述變換電路響應所述分析電路執(zhí)行的分析,將至少一些跟
蹤操作替代為修改的跟蹤操作,并將所述代碼變換成適合在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼,
以及生成將所述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù)。 本發(fā)明的第七方面提供一種用于監(jiān)視程序行為的分析設備,包括輸入,用于接收
跟蹤數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù),所述跟蹤數(shù)據(jù)是響應由正在被監(jiān)視的所述程序執(zhí)行的跟蹤操作而輸
出的跟蹤數(shù)據(jù),所述轉(zhuǎn)換數(shù)據(jù)包括對應于所述跟蹤操作的至少一些的數(shù)據(jù),所述跟蹤操作
的所述至少一些是修改的跟蹤操作;識別電路,用于識別響應所述修改的跟蹤操作而生成
的跟蹤數(shù)據(jù);轉(zhuǎn)換電路,用于使用所述接收的轉(zhuǎn)換數(shù)據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成
轉(zhuǎn)換的跟蹤數(shù)據(jù),所述轉(zhuǎn)換的跟蹤數(shù)據(jù)表示由所述程序在它被修改前的版本中存在的跟蹤
操作原本將輸出的跟蹤數(shù)據(jù)。 結合附圖閱讀下面說明性實施例的詳細說明,將明白本發(fā)明的上述和其他目的、 特征和優(yōu)點。
圖1示意示出用于監(jiān)視由嵌入式系統(tǒng)處理的計算機程序的行為的數(shù)據(jù)處理設備; 圖2示出用于編譯包括跟蹤操作的代碼的數(shù)據(jù)處理設備; 圖3示出被修改以形成修改的跟蹤操作的跟蹤操作的一些示例; 圖4是示出在用于在分析修改的跟蹤數(shù)據(jù)前將其轉(zhuǎn)換成常規(guī)跟蹤數(shù)據(jù)的方法中
的步驟的流程圖;以及 圖5是示出用于在計算機程序的編譯期間修改跟蹤數(shù)據(jù)的方法中的步驟的流程 圖。
具體實施例方式
圖1示出用于監(jiān)視由嵌入式系統(tǒng)20正在執(zhí)行的計算機程序的行為的數(shù)據(jù)處理設 備10。要分析的程序由編譯器40編譯。 計算機程序在程序代碼內(nèi)具有跟蹤操作,其在被處理時觸發(fā)跟蹤數(shù)據(jù)的輸出。這 些操作可以是許多不同事務,包括"跟蹤調(diào)用"指令、函數(shù)調(diào)用、內(nèi)聯(lián)函數(shù)調(diào)用、宏和特殊機 器代碼指令、根據(jù)跟蹤操作的跟蹤數(shù)據(jù)輸出。 在編譯器40編譯期間,程序被變換成代碼的表示或中間版本。此變換可涉及在代 碼內(nèi)來回移動函數(shù)和指令。 除重新布置代碼以將它設置成適合的形式以便由嵌入式系統(tǒng)20執(zhí)行外,編譯器 40修改至少一些跟蹤操作以嘗試減少與它們相關聯(lián)的開銷。這些開銷可包括生成的跟蹤數(shù) 據(jù)量、跟蹤操作的數(shù)量和需要的處理能力。 開銷的此減少涉及避免或至少減少冗余跟蹤數(shù)據(jù)的生成,將跟蹤操作合并在一 起,以及在一些實施例中更改跟蹤數(shù)據(jù)輸出以減少在目標系統(tǒng)上的處理要求。因此,由于程
9序代碼的重新布置,現(xiàn)在在同一基本塊內(nèi)出現(xiàn)于彼此附近的跟蹤調(diào)用能合并以形成單個修
改的跟蹤調(diào)用。此外,如果兩個自變量x和y由一個跟蹤調(diào)用輸出,并且隨后其乘積由第二
跟蹤調(diào)用輸出,則這兩個跟蹤調(diào)用能合并,以便只有第一跟蹤調(diào)用被輸出,并且兩個值的相
乘由分析跟蹤的分析器(主機調(diào)試器)而不是目標系統(tǒng)20來執(zhí)行。跟蹤調(diào)用的此類合并 具有加快目標系統(tǒng)20處理代碼的速度并使代碼的執(zhí)行更類似于無跟蹤操作的原程序的執(zhí) 行的優(yōu)點。 因此,編譯器40編譯要測試的程序并修改代碼內(nèi)的跟蹤操作。跟蹤操作的修改可 以遞歸方式進行,因為可幾次修正修改的跟蹤操作的集合,并且分析變換的代碼,直至發(fā)現(xiàn) 無進一步的或僅無關緊要的與跟蹤相關聯(lián)的成本節(jié)約。這些成本節(jié)約是在跟蹤操作的執(zhí)行 的成本方面的節(jié)約,并且包括在生成的跟蹤數(shù)據(jù)、跟蹤操作的數(shù)量、處理能力、使用的能量 及執(zhí)行時間方面的減少。編譯的代碼隨后由編譯器40輸出并發(fā)送到嵌入式系統(tǒng)20以用于 執(zhí)行。除產(chǎn)生帶有修改的跟蹤操作的編譯的代碼外,編譯器40也生成轉(zhuǎn)換表,該表包含將 修改的跟蹤操作關聯(lián)到它們從其生成的跟蹤操作的信息。在此實施例中,此轉(zhuǎn)換表直接發(fā) 送到數(shù)據(jù)處理設備10上的數(shù)據(jù)存儲50。在其它實施例中,它可與編譯的代碼一起發(fā)送到嵌 入式系統(tǒng)20。在代碼在一個系統(tǒng)上編譯,并在不同系統(tǒng)上分析的情況下,這可能是適當?shù)摹?
編譯的代碼隨后由嵌入式系統(tǒng)20執(zhí)行,并且由編譯的代碼內(nèi)的跟蹤操作生成的 跟蹤數(shù)據(jù)從嵌入式系統(tǒng)輸出并且在接口 60接收。此跟蹤數(shù)據(jù)隨后由數(shù)據(jù)處理設備10內(nèi)的 分析器70分析。分析器70還訪問在數(shù)據(jù)存儲50中存儲的轉(zhuǎn)換表。因此,分析器70查看 跟蹤數(shù)據(jù),并且它使用數(shù)據(jù)存儲50中存儲的轉(zhuǎn)換表將對應于它未預期的跟蹤調(diào)用(即原代 碼中不存在的跟蹤調(diào)用)的任何跟蹤數(shù)據(jù)重新構建成某種形式,該種形式與在如果跟蹤調(diào) 用未被修改的情況下將生成的形式有關,并且因此它能理解。重新構建的跟蹤數(shù)據(jù)可以是 與未修改的跟蹤調(diào)用將輸出的跟蹤數(shù)據(jù)相同,或者它可以除時間戳數(shù)據(jù)外是相同的。隨后, 它能使用常規(guī)分析技術分析此跟蹤數(shù)據(jù)。 為了能夠識別轉(zhuǎn)換表內(nèi)的適當轉(zhuǎn)換數(shù)據(jù),識別修改的跟蹤操作的數(shù)據(jù)與它生成的 跟蹤數(shù)據(jù)一起輸出,此識別數(shù)據(jù)也與轉(zhuǎn)換數(shù)據(jù)一起存儲在轉(zhuǎn)換表中。 通過以此方式修改跟蹤操作,編譯器40減少進行的跟蹤調(diào)用的數(shù)量的至少一些、 輸出的跟蹤數(shù)據(jù)及嵌入式系統(tǒng)20的處理開銷。 雖然在此實施例中未示出,但另外的壓縮技術可用于減少嵌入式系統(tǒng)20輸出的 數(shù)據(jù)。 圖2示出本發(fā)明的備選實施例,其中,數(shù)據(jù)處理設備12中的編譯器40編譯數(shù)據(jù)存 儲55中存儲的程序,并且在編譯程序的同時以類似于圖1的設備的方式修改程序的跟蹤操 作。然而,在此實施例中,編程程序的數(shù)據(jù)處理設備12不是分析它的設備。因此,生成作為 修改的跟蹤調(diào)用的碼本的轉(zhuǎn)換表由編譯器40經(jīng)接口60與編譯的代碼一起輸出到嵌入式系 統(tǒng)20。編譯的代碼包含指示處理器輸出轉(zhuǎn)換表的指令。因此,在經(jīng)輸出22連接到分析系統(tǒng) 時,嵌入式系統(tǒng)20運行編譯的代碼,并響應此代碼,經(jīng)跟蹤輸出22將轉(zhuǎn)換表與生成的跟蹤 數(shù)據(jù)一起輸出。此跟蹤數(shù)據(jù)隨后能由此單獨的系統(tǒng)使用轉(zhuǎn)換表來分析。
在一些實施例中,該單獨的系統(tǒng)是帶有另外的塊的常規(guī)跟蹤分析器,該塊使用轉(zhuǎn) 換表將由修改的跟蹤操作生成的跟蹤數(shù)據(jù)轉(zhuǎn)換成本例將由原跟蹤操作輸出的跟蹤數(shù)據(jù)。一 旦此轉(zhuǎn)換已執(zhí)行,則常規(guī)跟蹤分析器能分析跟蹤數(shù)據(jù)。
10
圖3示出被修改以形成修改的跟蹤操作的跟蹤操作的一些示例。圖3A示出三個 跟蹤事件,在此實施例中,這些事件是在編譯器已生成的代碼的中間表示內(nèi)的基本塊中。認 識到這三個事件在同一基本塊內(nèi),使得如果執(zhí)行一個事件,則將執(zhí)行所有事件,并且它們包 含在各個跟蹤調(diào)用的執(zhí)行之間將不改變的自變量,編譯器組合這些跟蹤調(diào)用以生成新的壓 縮跟蹤調(diào)用,在這個示例中它表示為C跟蹤19, x, y。 19是用于此修改的跟蹤調(diào)用的識別數(shù) 據(jù),而x和y是輸出的自變量。這些自變量是由原三個跟蹤調(diào)用輸出的自變量。
除生成此壓縮的跟蹤調(diào)用外,編譯器還創(chuàng)建表,該表允許將修改的跟蹤數(shù)據(jù)轉(zhuǎn)換 回未修改的程序原本將傳送的跟蹤數(shù)據(jù)。在這個示例中,對應于此修改的跟蹤調(diào)用的表條 目如果轉(zhuǎn)換成人可讀形式,將看上去如圖3A所示。因此,它識別19為修改的跟蹤調(diào)用,并 且AB為它輸出的自變量。因此,在收到標記為19的跟蹤事件及兩個自變量(AB)時,分析器 能將這些與它預期的事件1進行匹配,并生成5和第一 自變量A的跟蹤數(shù)據(jù),作為對應于原 未修改的跟蹤調(diào)用事件1的跟蹤數(shù)據(jù)。也能將它與預期的第二跟蹤調(diào)用事件2進行匹配, 并生成與修改的跟蹤調(diào)用一起接收的兩個自變量A和B(對應于x和y)的跟蹤數(shù)據(jù)。也能 將它與預期的第三跟蹤調(diào)用事件3進行匹配,并且將輸出第二自變量(即B)和數(shù)字7。
通常,跟蹤數(shù)據(jù)還附加有時間戳,并且系統(tǒng)可要求時間戳是唯一的或反映跟蹤操 作的原來表達的順序。此類情況下,在將修改的跟蹤數(shù)據(jù)轉(zhuǎn)換回原形式時,分析器可將額外 的字段添加到與該修改的跟蹤事件一起接收的時間戳。因此,如果修改的跟蹤事件19具有 時間戳2000,則為三個原跟蹤調(diào)用生成的時間戳能夠?qū)τ谑录?是2000. l,對于事件2是 2000. 2,并且對于事件3是2000. 3。備選地,在其它實施例中,編譯器可估計未修改的代碼 中單獨調(diào)用之間的周期數(shù)量,并且在如圖3B所示的表中包括該信息。此處,估計事件1為 在修改的跟蹤指令事件19之前5個周期發(fā)生,而估計事件2為在2個周期前發(fā)生,事件3 在3個周期后發(fā)生。因此,在修改的跟蹤數(shù)據(jù)具有時間戳,指示它在2000發(fā)生時,原跟蹤數(shù) 據(jù)能如圖所示重新構建。 像這樣來估計時間能導致一些時間戳和單獨的修改事件重疊,因此,在此類情況 下可能需要一種機制來調(diào)節(jié)時序以保存事件的正確排序。此類調(diào)節(jié)能內(nèi)置到編譯器中。
能修改的備選跟蹤調(diào)用如圖3C所示,這些調(diào)用與減少輸出的數(shù)據(jù)量有關,并且也 與正在測試的目標系統(tǒng)需要的處理的量有關。在這個示例中,編譯器認識到輸出數(shù)據(jù)xy和 x+y不是必要的,并且只輸出x和y及指示原跟蹤調(diào)用將輸出xy和x+y的轉(zhuǎn)換數(shù)據(jù)使得調(diào) 試主機能夠從輸出的減少的數(shù)據(jù)生成另外的數(shù)據(jù)。在跟蹤調(diào)用需要自變量加特定值或相乘的兩個自變量一起輸出的其它實施例中,
可能最好是單獨輸出這些值,并在調(diào)試主機而不是目標系統(tǒng)上執(zhí)行組合它們的處理步驟。
在一些情況下,這能導致輸出的跟蹤數(shù)據(jù)量增大,但在重點是減少目標系統(tǒng)的處理要求的
情況下,這可能是可接受的。應注意的是,如果由于非跟蹤的某一原因,程序需要自變量的
相乘值,則在此類情況下,相乘的值應被輸出,因為目標系統(tǒng)反正也需要執(zhí)行這些相乘步
驟,并且輸出相乘的值減少了在調(diào)試主機上輸出的數(shù)據(jù)和執(zhí)行的處理。 轉(zhuǎn)換數(shù)據(jù)的壓縮也能夠執(zhí)行。例如,如果轉(zhuǎn)換的事件42對應于原事件X、 Y、 Z,并
且轉(zhuǎn)換的事件53對應于轉(zhuǎn)換的事件X、Y、Z、P、Q,則圖3D示出能如何通過使用為事件42存
在的信息來減少表示事件53需要的轉(zhuǎn)換表數(shù)據(jù)。 圖4示出一個流程圖,其示出將修改的跟蹤數(shù)據(jù)轉(zhuǎn)換成常規(guī)跟蹤數(shù)據(jù)并隨后分析它的方法。跟蹤數(shù)據(jù)與轉(zhuǎn)換表一起被接收。隨后,分析跟蹤數(shù)據(jù),并且檢查由跟蹤調(diào)用生 成的每個跟蹤數(shù)據(jù)集或段以查看它是否對應于在原程序中存在的跟蹤調(diào)用。如果是,則檢 查下一跟蹤數(shù)據(jù)段。如果不是,則讀取轉(zhuǎn)換表,并且訪問對應于此操作的轉(zhuǎn)換數(shù)據(jù),以及將 跟蹤數(shù)據(jù)修改為對應原程序原本將輸出的跟蹤數(shù)據(jù)。應注意,可不將它修改為與原跟蹤調(diào) 用原本將輸出的跟蹤數(shù)據(jù)相同,但它將足夠類似,以便預期原跟蹤數(shù)據(jù)的工具能分析它。例 如,如果跟蹤數(shù)據(jù)包含時間戳,則可能是這些時間戳與原調(diào)用原本將輸出的時間戳不完全 相同,然而,對于要分析的代碼,它們足夠類似。 圖5示出修改代碼中的跟蹤調(diào)用以減少代碼中的跟蹤調(diào)用的數(shù)量和輸出的跟蹤 數(shù)據(jù)的方法的一些步驟。應注意,所示步驟不一定按示出的順序執(zhí)行,并且一些步驟可相互 并行執(zhí)行。在所示示例中,基本塊中的多個跟蹤調(diào)用被合并以形成單個修改的跟蹤調(diào)用,由 此減少在代碼中跟蹤調(diào)用的數(shù)量并可能減少輸出的數(shù)據(jù)量。此外,輸出冗余數(shù)據(jù)的跟蹤調(diào) 用也被識別和修改,以便不輸出冗余數(shù)據(jù)。 未示出的其它優(yōu)化步驟可在代碼上執(zhí)行。例如,可檢測到標記為等冪的跟蹤事件,
并且在有同一事件的相鄰實例的情況下,只需要發(fā)射它們之一,因而能刪除其它實例。應注
意的是,這可能已經(jīng)通過常規(guī)合并過程處理。此外,可能有對某些跟蹤操作的屏障指示或標
記,指示不應移動這些操作到其之外的限制。在決定有關合并跟蹤調(diào)用時,不進行超出這些
指定的限制之外的合并。另外,一些跟蹤事件可具有指示它們是要打開還是關閉及何時修
改跟蹤調(diào)用的標記,這些標記被分析,如果跟蹤調(diào)用要被關閉,則它從代碼中刪除。 在一些實施例中,可能有關于跟蹤數(shù)據(jù)能發(fā)射的事件的數(shù)量的限制,并且生成修
改的跟蹤事件可能增大事件的數(shù)量。在此限制成為問題的情況下,當確定要修改哪些跟蹤
事件或調(diào)用時,可執(zhí)行圖中所示的那些步驟外的另外步驟以防止超出限制。在此類情況下,
編譯器分析代碼并計算各種事件的頻率,以便它能最有效地利用可用事件代碼,只產(chǎn)生較
頻繁發(fā)生的或減少大量的跟蹤操作或輸出的跟蹤數(shù)據(jù)的修改的事件。這樣做是為了嘗試從
編碼空間獲得最佳值。 雖然在本文參照附圖已詳細描述本發(fā)明的說明性實施例,但要理解,本發(fā)明并不 限于那些具體的實施例,并且在不脫離如所附權利要求定義的本發(fā)明范圍和精神的情況 下,本領域的技術人員可實現(xiàn)其不同的更改和修改。例如,在不脫離本發(fā)明范圍的情況下, 所附從屬權利要求的特征可與獨立權利要求的特征進行各種組合。
權利要求
一種編譯計算機程序的方法,所述計算機程序包括用于觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,所述編譯的方法包括以下步驟將所述計算機程序變換成形成所述計算機程序的中間版本的代碼;分析所述變換的代碼;將所述跟蹤操作的至少一些替代為修改的跟蹤操作;將所述代碼變換成適合于在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼;以及生成將所述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù)。
2. 如權利要求1所述的方法,其中所述方法分析所述變換的代碼以確定所述至少一些 跟蹤操作,其替代為修改的跟蹤操作將減少所述跟蹤操作的執(zhí)行的成本,并且依據(jù)所述分 析來選擇要替代的所述至少一些跟蹤操作。
3. 如權利要求1所述的方法,其中所述替代步驟包括將所述跟蹤操作的至少兩個替代 為至少一個修改的跟蹤操作。
4. 如權利要求3所述的方法,其中所述分析步驟包括識別代碼的所述中間版本的基本 塊內(nèi)的至少兩個跟蹤操作,所述基本塊是代碼的塊,在其內(nèi)如果執(zhí)行一個指令,則將執(zhí)行所 述指令的所有指令,并且所述替代步驟包括將所述至少兩個跟蹤操作替代為所述修改的跟 蹤操作的至少一個。
5. 如權利要求1所述的方法,其中所述替代步驟包括將所述跟蹤操作的至少一個替代 為至少一個修改的跟蹤操作和相關聯(lián)的時間戳校正數(shù)據(jù),所述時間戳校正數(shù)據(jù)指示相對于 所述修改的跟蹤操作的執(zhí)行,所述至少一些跟蹤操作何時將執(zhí)行。
6. 如權利要求1所述的方法,其中生成轉(zhuǎn)換數(shù)據(jù)的所述步驟包括生成在所述跟蹤操作 的每個和替代它們的所述修改的跟蹤操作的執(zhí)行之間的周期的數(shù)量的估計。
7. 如權利要求2所述的方法,其中所述替代步驟包括將所述跟蹤操作的至少一個替代 為修改的跟蹤操作,所述修改的跟蹤操作輸出的數(shù)據(jù)比所述至少一個跟蹤操作輸出的數(shù)據(jù) 更少。
8. 如權利要求2所述的方法,其中所述替代步驟包括將所述跟蹤操作的至少一個替代 為修改的跟蹤操作,所述修改的跟蹤操作需要所述計算機程序執(zhí)行的處理步驟比所述至少 一個跟蹤操作需要的更少。
9. 如權利要求1所述的方法,其中所述跟蹤操作的至少一個包括標記數(shù)據(jù),所述標記 數(shù)據(jù)指示所述跟蹤操作當被替代為所述修改的跟蹤操作之一時能移動的程度,在確定哪些 跟蹤操作要替代時,所述替代的步驟響應所述標記數(shù)據(jù)。
10. 如權利要求1所述的方法,其中所述計算機程序包括屏障指示,跟蹤操作不能跨越 所述屏障指示移動來形成修改的跟蹤操作。
11. 如權利要求1所述的方法,包括在所述變換的程序內(nèi)包括代碼以用于控制執(zhí)行所 述代碼的處理器輸出所述轉(zhuǎn)換數(shù)據(jù)的又一步驟。
12. 如權利要求2所述的編譯計算機程序的方法,所述方法還包括兩個步驟 在將所述至少一些跟蹤操作替代為修改的跟蹤操作的所述步驟后,分析所述修改的代碼;將所述跟蹤操作的至少一些或修改的跟蹤操作替代為修改的跟蹤操作; 以及重復所述兩個步驟,直至分析所述修改的代碼的所述步驟指示,當與所述以前修改的代碼相比時,所述修改的代碼未顯著減少所述跟蹤操作的執(zhí)行的成本。
13. —種監(jiān)視程序行為的方法,包括接收跟蹤數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù),所述跟蹤數(shù)據(jù)是響應由正在被監(jiān)視的所述程序執(zhí)行的跟蹤 操作而輸出的跟蹤數(shù)據(jù),所述轉(zhuǎn)換數(shù)據(jù)包括對應于所述跟蹤操作的至少一些的數(shù)據(jù),所述 跟蹤操作的所述至少一些是修改的跟蹤操作;識別響應所述修改的跟蹤操作而生成的跟蹤數(shù)據(jù);使用所述轉(zhuǎn)換數(shù)據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成轉(zhuǎn)換的跟蹤數(shù)據(jù),所述轉(zhuǎn)換的跟 蹤數(shù)據(jù)表示由所述程序在它被修改前的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù)。
14. 如權利要求13所述的監(jiān)視程序行為的方法,其中除任何時間戳數(shù)據(jù)外,所述轉(zhuǎn)換 的跟蹤數(shù)據(jù)與由所述程序在它被修改前的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù) 相同。
15. 如權利要求13所述的監(jiān)視程序行為的方法,包括使用所述跟蹤數(shù)據(jù)來分析所述程 序行為的又一步驟。
16. 如權利要求13所述的監(jiān)視程序行為的方法,其中從正在被監(jiān)視的所述系統(tǒng)接收所 述轉(zhuǎn)換數(shù)據(jù)和所述跟蹤數(shù)據(jù)。
17. —種分析在嵌入式系統(tǒng)上執(zhí)行的計算機程序的行為的方法,所述計算機程序包括 用于觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,所述方法包括以下步 驟將所述計算機程序變換成形成所述計算機程序的中間版本的代碼; 分析所述變換的代碼;將所述跟蹤操作的至少一些替代為修改的跟蹤操作; 將所述代碼變換成適合于在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼;生成將所述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù),以允許解釋 響應所述修改的跟蹤操作而輸出的跟蹤數(shù)據(jù);將所述變換的代碼輸出到所述數(shù)據(jù)處理系統(tǒng);將所述轉(zhuǎn)換數(shù)據(jù)輸出到程序監(jiān)視設備;在所述數(shù)據(jù)處理系統(tǒng)上執(zhí)行所述變換的代碼;在所述程序監(jiān)視設備從所述數(shù)據(jù)處理系統(tǒng)接收跟蹤數(shù)據(jù);識別所述跟蹤數(shù)據(jù)內(nèi)響應所述修改的跟蹤操作而生成的跟蹤數(shù)據(jù);使用所述轉(zhuǎn)換數(shù)據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成表示由所述程序在它被修改前 的版本中存在的跟蹤操作原本將輸出的跟蹤數(shù)據(jù)的跟蹤數(shù)據(jù);使用所述跟蹤數(shù)據(jù)來分析所述程序行為。
18. —種用于控制數(shù)據(jù)處理設備以執(zhí)行如權利要求1所述方法的步驟的計算機程序。
19. 一種用于控制數(shù)據(jù)處理設備以執(zhí)行如權利要求13所述方法的步驟的計算機程序。
20. —種用于編譯計算機程序的編譯器,所述計算機程序包括用于觸發(fā)由所述計算機 程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,所述編譯器包括變換電路,用于將所述計算機程序變換成形成所述計算機程序的中間版本的代碼; 分析電路,用于分析所述變換的代碼;其中所述變換電路響應由所述分析電路執(zhí)行的分析,將所述跟蹤操作的至少一些替代為修改的跟蹤操作,并將所述代碼變換成適合于在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼,以及生成將所 述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù)。
21. —種用于監(jiān)視程序行為的分析設備,包括輸入,用于接收跟蹤數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù),所述跟蹤數(shù)據(jù)是響應由正在被監(jiān)視的所述程序 執(zhí)行的跟蹤操作而輸出的跟蹤數(shù)據(jù),所述轉(zhuǎn)換數(shù)據(jù)包括對應于所述跟蹤操作的至少一些的 數(shù)據(jù),所述跟蹤操作的所述至少一些是修改的跟蹤操作;識別電路,用于識別響應所述修改的跟蹤操作而生成的跟蹤數(shù)據(jù);轉(zhuǎn)換電路,用于使用所述接收的轉(zhuǎn)換數(shù)據(jù)來轉(zhuǎn)換所述識別的跟蹤數(shù)據(jù)以生成轉(zhuǎn)換的跟 蹤數(shù)據(jù),所述轉(zhuǎn)換的跟蹤數(shù)據(jù)表示由所述程序在它被修改前的版本中存在的跟蹤操作原本 將輸出的跟蹤數(shù)據(jù)。
全文摘要
本發(fā)明名稱為“通過修改跟蹤操作減少跟蹤開銷”。公開了一種編譯計算機程序以提高跟蹤效率的方法。計算機程序包括用于觸發(fā)由所述計算機程序生成的跟蹤數(shù)據(jù)的輸出的多個跟蹤操作,并且編譯的方法包括以下步驟將所述計算機程序變換成形成所述計算機程序的中間版本的代碼;分析所述變換的代碼;將所述跟蹤操作的至少一些替代為修改的跟蹤操作;將所述代碼變換成適合在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的代碼;以及生成將所述修改的跟蹤操作關聯(lián)到它們替代的所述跟蹤操作的轉(zhuǎn)換數(shù)據(jù)。
文檔編號G06F9/45GK101714098SQ20091017975
公開日2010年5月26日 申請日期2009年9月25日 優(yōu)先權日2008年9月26日
發(fā)明者A·D·賴德, E·格林利-埃文斯, K·E·尼伯恩 申請人:Arm有限公司