試與無(wú)侵入覆蓋率分析新范式)
1. 為什么這條合作消息值得嵌入式開發(fā)者停下來(lái)看一眼作為一名常年和MCU、SoC打交道的嵌入式工程師我對(duì)Lauterbach這個(gè)名字再熟悉不過(guò)。TRACE32幾乎就是高性能調(diào)試工具的代名詞尤其在汽車電子、航空航天這些對(duì)可靠性和實(shí)時(shí)性要求極高的領(lǐng)域它的JTAG/SWD調(diào)試方案幾乎是事實(shí)標(biāo)準(zhǔn)。所以當(dāng)我看到GuruCE and Lauterbach Establish Official Partnership這條消息時(shí)第一反應(yīng)是GuruCE是做什么的它憑什么能進(jìn)入Lauterbach的生態(tài)圈1.1 GuruCE是誰(shuí)不是一句做工具的就能概括準(zhǔn)確地說(shuō)GuruCE是一家專注于嵌入式軟件運(yùn)行時(shí)質(zhì)量分析的工具廠商。它的定位并不在調(diào)試本身而是站在調(diào)試數(shù)據(jù)的下游把從調(diào)試器、Trace采集器里拿到的原始執(zhí)行信息轉(zhuǎn)換成工程師能夠直接用于決策的質(zhì)量結(jié)論。更直白一點(diǎn)Lauterbach負(fù)責(zé)告訴你程序跑到了哪里、出了什么錯(cuò)而GuruCE負(fù)責(zé)告訴你這段程序在真實(shí)目標(biāo)上執(zhí)行得怎么樣、覆蓋率夠不夠、有沒(méi)有隱藏的時(shí)序風(fēng)險(xiǎn)。我不太想把GuruCE簡(jiǎn)單歸類為覆蓋率工具或性能分析工具因?yàn)樗暮诵哪芰ζ鋵?shí)是通過(guò)合并多種運(yùn)行時(shí)數(shù)據(jù)源對(duì)程序行為做交叉驗(yàn)證。你可以理解為它在調(diào)試工具之上加了一層質(zhì)量分析大腦。過(guò)去這類分析功能往往由大廠自研或者靠多個(gè)獨(dú)立工具手工拼湊而GuruCE做的事情是把它們結(jié)構(gòu)化、流程化讓開發(fā)者在日常迭代中就能順手完成。1.2 Lauterbach在調(diào)試工具鏈中的地位任何做過(guò)嵌入式開發(fā)的人都知道調(diào)試器和編譯器一樣屬于平時(shí)不太起眼、關(guān)鍵時(shí)刻要命的基礎(chǔ)設(shè)施。Lauterbach TRACE32從1979年做到今天能夠在全球汽車電子供應(yīng)鏈里扎根靠的絕對(duì)不只是品牌。它的核心壁壘在兩點(diǎn)一是對(duì)芯片架構(gòu)的覆蓋極廣從ARM、RISC-V到各種專有DSP核都有深度適配二是它的實(shí)時(shí)Trace能力也就是通過(guò)硬件調(diào)試接口采集CPU執(zhí)行指令流、數(shù)據(jù)訪問(wèn)、時(shí)間戳等信息做到對(duì)目標(biāo)系統(tǒng)零干擾或極低干擾。正是因?yàn)檫@種硬核形象Lauterbach在選擇合作伙伴時(shí)相當(dāng)謹(jǐn)慎。它不會(huì)隨便跟一個(gè)工具廠商簽個(gè)兼容性聲明就完事而是要求對(duì)方真正理解底層調(diào)試協(xié)議、Trace數(shù)據(jù)格式、目標(biāo)系統(tǒng)的實(shí)時(shí)約束。所以GuruCE能獲得官方合作伙伴身份這件事本身就傳遞了一個(gè)信號(hào)GuruCE的分析能力已經(jīng)通過(guò)了Lauterbach在技術(shù)層面的檢驗(yàn)可以放心地推薦給TRACE32用戶。1.3 官方合作伙伴和普通工具互相兼容有什么本質(zhì)區(qū)別這里我多說(shuō)一句因?yàn)楹芏喙こ處煂?duì)兼容和官方合作的差別沒(méi)什么概念。普通的工具兼容往往是A工具導(dǎo)出一個(gè)文件B工具再導(dǎo)入格式對(duì)不對(duì)、信息丟失不丟失全靠雙方自覺(jué)出了問(wèn)題兩邊互相推諉是常事。而官方合作伙伴關(guān)系通常意味著三個(gè)層面的對(duì)齊技術(shù)上雙方在API、數(shù)據(jù)格式、協(xié)議細(xì)節(jié)上做了聯(lián)調(diào)GuruCE可以直接讀取TRACE32的運(yùn)行時(shí)數(shù)據(jù)而不是靠CSV或日志文件這種間接翻譯。支持上兩家公司的技術(shù)支持團(tuán)隊(duì)會(huì)建立直接的反饋通道遇到問(wèn)題不會(huì)出現(xiàn)廠商A說(shuō)找廠商B、廠商B說(shuō)找廠商A的死循環(huán)。版本上新的芯片調(diào)試支持和新的分析方法會(huì)同步演進(jìn)而不是各做各的等到用戶發(fā)現(xiàn)時(shí)已經(jīng)斷層。對(duì)項(xiàng)目團(tuán)隊(duì)來(lái)說(shuō)這種深度綁定帶來(lái)的直接價(jià)值是工具鏈的風(fēng)險(xiǎn)可控了。你在做方案選型時(shí)不需要自己當(dāng)膠水工程師去驗(yàn)證兩個(gè)工具之間到底能不能配合好這個(gè)臟活累活已經(jīng)有人替你干完了。2. 聯(lián)手背后嵌入式軟件質(zhì)量分析的最大痛點(diǎn)是什么聊完背景咱們進(jìn)入正題。兩家公司為什么要在現(xiàn)在這個(gè)時(shí)間點(diǎn)建立合作我的判斷是嵌入式軟件質(zhì)量分析領(lǐng)域正卡在一個(gè)瓶頸上不是沒(méi)有工具而是工具和工具之間缺一座橋。這座橋的左邊是調(diào)試工具右邊是質(zhì)量分析而GuruCE和Lauterbach正在試圖把橋徹底打通。2.1 傳統(tǒng)覆蓋率分析的侵入式難題做過(guò)功能安全認(rèn)證的人對(duì)代碼覆蓋率應(yīng)該不陌生。ISO 26262的ASIL D等級(jí)明確要求結(jié)構(gòu)覆蓋率分析必須達(dá)到特定標(biāo)準(zhǔn)比如語(yǔ)句覆蓋率100%、分支覆蓋率100%、MC/DC覆蓋率按等級(jí)要求執(zhí)行。理論很清晰但落地的時(shí)候問(wèn)題就來(lái)了覆蓋率數(shù)據(jù)怎么采集最常見(jiàn)的做法是插樁。編譯器在源代碼或目標(biāo)代碼里插入探針程序每執(zhí)行到一個(gè)插樁點(diǎn)就記錄一次。這個(gè)方法成熟、簡(jiǎn)單、便宜但它有一個(gè)原罪——侵入性。探針本身會(huì)占用CPU時(shí)間、增加代碼體積、改變內(nèi)存布局這些都會(huì)讓程序的實(shí)際行為偏離真實(shí)情況。對(duì)于一秒鐘控制幾千轉(zhuǎn)電機(jī)的FOC算法一個(gè)額外的函數(shù)調(diào)用都可能讓PWM波形出現(xiàn)幾個(gè)微秒的抖動(dòng)而這個(gè)抖動(dòng)在繼電器和機(jī)械結(jié)構(gòu)上可能根本看不出來(lái)但在示波器上會(huì)非常明顯。我在之前的項(xiàng)目里就栽過(guò)跟頭。某次給客戶做電機(jī)控制器的覆蓋率分析用的是插樁方案測(cè)出來(lái)的結(jié)果倒是漂亮得很覆蓋率84%但客戶拿回去批量測(cè)試時(shí)發(fā)現(xiàn)有幾臺(tái)設(shè)備的啟動(dòng)時(shí)序偶發(fā)異常。最后排查了大半個(gè)月才定位到是插樁探針改變了中斷響應(yīng)時(shí)間。從那以后我對(duì)侵入式分析工具就多了一層戒心。2.2 時(shí)序漂移插樁方案對(duì)實(shí)時(shí)系統(tǒng)的影響時(shí)序漂移這個(gè)問(wèn)題比覆蓋率本身的準(zhǔn)確性更隱蔽也更危險(xiǎn)。因?yàn)槌绦蛟诓鍢吨笠廊荒苓\(yùn)行大部分功能測(cè)試也不會(huì)失敗問(wèn)題會(huì)潛伏到系統(tǒng)集成甚至量產(chǎn)階段才爆發(fā)。而基于Trace的覆蓋率分析也就是利用調(diào)試硬件的Trace接口采集程序執(zhí)行路徑則完全不同它的原理決定了覆蓋率數(shù)據(jù)是監(jiān)聽來(lái)的而不是參與進(jìn)來(lái)的。TRACE32的Core Trace接口能在CPU內(nèi)核運(yùn)行的同時(shí)把指令指針的變化、數(shù)據(jù)訪問(wèn)地址等關(guān)鍵信息以極低的開銷很多芯片設(shè)計(jì)上是零等待周期輸出到專門的Trace緩沖區(qū)內(nèi)。GuruCE拿到這段Trace數(shù)據(jù)之后在主機(jī)端做離線分析就能重建出程序到底執(zhí)行了哪些代碼路徑。整個(gè)過(guò)程目標(biāo)系統(tǒng)的代碼一行沒(méi)改運(yùn)行時(shí)的狀態(tài)也幾乎沒(méi)有被擾動(dòng)。這就解決了一個(gè)大問(wèn)題覆蓋率數(shù)據(jù)開始反映真實(shí)世界的執(zhí)行情況而不是實(shí)驗(yàn)室條件下的執(zhí)行情況。在安全認(rèn)證審查中這種數(shù)據(jù)的可信度完全不同。審查員如果看到你的覆蓋率報(bào)告是用侵入式工具產(chǎn)生的往往會(huì)追著問(wèn)探針是怎么布的對(duì)系統(tǒng)實(shí)時(shí)性有沒(méi)有影響你有沒(méi)有做對(duì)比實(shí)驗(yàn)而基于Trace的分析可以直接用硬件時(shí)序數(shù)據(jù)回應(yīng)這些質(zhì)疑。2.3 從調(diào)試到分析的工作流斷裂再來(lái)說(shuō)說(shuō)工作流。過(guò)去典型的嵌入式項(xiàng)目里調(diào)試和質(zhì)量分析是兩個(gè)獨(dú)立的環(huán)節(jié)。工程師先在TRACE32里斷點(diǎn)單步、看變量、找bug等代碼改得差不多了再開一個(gè)覆蓋率工具或者性能分析工具把固件燒進(jìn)去重新跑一遍測(cè)試。這個(gè)流程最大的問(wèn)題是你調(diào)試時(shí)用的環(huán)境和分析時(shí)用的環(huán)境往往不是同一個(gè)狀態(tài)。有些bug只在特定的輸入序列、特定的時(shí)序條件下出現(xiàn)你調(diào)試時(shí)能復(fù)現(xiàn)但一換成打開覆蓋率工具的構(gòu)建版本可能就復(fù)現(xiàn)不出來(lái)了。原因可能是插樁改變了時(shí)序也可能是優(yōu)化等級(jí)變了甚至可能是鏈接腳本里地址布局變了。這種不確定性是嵌入式開發(fā)里最消磨耐心的東西之一。GuruCE和Lauterbach的整合思路就是在同一個(gè)環(huán)境下同時(shí)完成調(diào)試和采集。你直接在TRACE32里調(diào)試調(diào)試的同時(shí)Trace數(shù)據(jù)就在后臺(tái)記錄著分析完這個(gè)bug順手就能看這段運(yùn)行的覆蓋率、時(shí)序、調(diào)用路徑。不需要重新構(gòu)建、不需要換工具、不需要復(fù)現(xiàn)第二次。對(duì)于那種千載難逢的偶發(fā)bug這個(gè)能力幾乎是救命級(jí)別的因?yàn)閎ug跑了第一次就沒(méi)了如果你當(dāng)時(shí)沒(méi)記錄下來(lái)后面可能幾個(gè)月都等不到第二次。3. 技術(shù)互補(bǔ)的邏輯TRACE32的Trace數(shù)據(jù)遇上GuruCE的分析算法前面說(shuō)了痛點(diǎn)這一節(jié)來(lái)拆解這兩家到底是怎么互補(bǔ)的。不是簡(jiǎn)單地把兩份報(bào)告放在一起就算整合真正的價(jià)值在于數(shù)據(jù)層面的原生互通和算法層面的深度融合。3.1 TRACE32的實(shí)時(shí)Trace采集能力先說(shuō)說(shuō)Lauterbach這邊能提供什么。TRACE32本身的調(diào)試功能已經(jīng)非常強(qiáng)大但它的Trace才是最核心的技術(shù)護(hù)城河之一。不同芯片的Trace實(shí)現(xiàn)差異很大ARM的CoreSight、RISC-V的N-trace、Infineon的MCDS各有各的規(guī)格和限制。Lauterbach的厲害之處在于它把不同架構(gòu)的Trace接口都抽象成了一整套統(tǒng)一的數(shù)據(jù)視圖開發(fā)者不需要關(guān)心底層是誰(shuí)家的調(diào)試硬件只需要知道我能從TRACE32里導(dǎo)出什么格式的Trace數(shù)據(jù)。按照公開的技術(shù)資料TRACE32的Trace數(shù)據(jù)里可以包含指令地址、數(shù)據(jù)地址、數(shù)據(jù)值、時(shí)間戳、任務(wù)ID、中斷嵌套層級(jí)等信息。有些高檔的Trace硬件支持連續(xù)記錄幾秒甚至幾十秒的完整執(zhí)行流注意是每一行機(jī)器指令級(jí)別。這份數(shù)據(jù)量大得驚人1秒的Trace動(dòng)輒幾百M(fèi)B靠人工看是根本不可能的必須靠程序來(lái)做自動(dòng)分析。3.2 GuruCE的分析側(cè)重覆蓋率、邊界行為與時(shí)序那么GuruCE拿到這些Trace數(shù)據(jù)之后到底分析什么呢根據(jù)它在嵌入式質(zhì)量領(lǐng)域的定位我理解核心是三個(gè)方向覆蓋率分析把Trace中的指令地址映射到源代碼行計(jì)算出語(yǔ)句覆蓋、分支覆蓋、MC/DC覆蓋等指標(biāo)。因?yàn)橛姓鎸?shí)的執(zhí)行路徑和時(shí)間戳還能區(qū)分出哪些覆蓋是在哪個(gè)任務(wù)上下文里達(dá)成的。邊界行為分析通過(guò)數(shù)據(jù)訪問(wèn)Trace檢測(cè)數(shù)組越界、棧溢出、未初始化變量讀取這類潛在的運(yùn)行時(shí)錯(cuò)誤。這種分析比靜態(tài)分析工具更接近真實(shí)執(zhí)行情況。時(shí)序分析利用時(shí)間戳重建任務(wù)執(zhí)行時(shí)間線分析任務(wù)的最壞執(zhí)行時(shí)間、中斷響應(yīng)延遲、任務(wù)切換抖動(dòng)等。在功能安全領(lǐng)域這些數(shù)據(jù)是確定系統(tǒng)調(diào)度是否可靠的重要依據(jù)。這些分析維度單獨(dú)拿出來(lái)都不算新鮮但把它們和無(wú)侵入采集結(jié)合起來(lái)就產(chǎn)生了質(zhì)變。過(guò)去你只能信任實(shí)驗(yàn)室里精心構(gòu)造的測(cè)試用例因?yàn)榍秩胧焦ぞ邲](méi)法在真實(shí)工況下長(zhǎng)期運(yùn)行。而現(xiàn)在你可以讓設(shè)備在客戶現(xiàn)場(chǎng)真實(shí)運(yùn)行一周把Trace數(shù)據(jù)定期導(dǎo)出來(lái)做分析看看覆蓋率有沒(méi)有變化、有沒(méi)有出現(xiàn)測(cè)試實(shí)驗(yàn)室里沒(méi)見(jiàn)過(guò)的執(zhí)行路徑。3.3 整合后的一條典型工作流結(jié)合場(chǎng)景描述為了讓你有更直觀的感受我結(jié)合一個(gè)具體場(chǎng)景來(lái)描述整合后的工作流長(zhǎng)什么樣。假設(shè)你在調(diào)試一個(gè)車載控制器的CAN通信模塊客戶反饋說(shuō)車輛在特定溫度區(qū)間行駛一段時(shí)間后CAN報(bào)文會(huì)出現(xiàn)偶發(fā)的延遲。你在實(shí)驗(yàn)室里怎么都復(fù)現(xiàn)不了傳統(tǒng)手段基本無(wú)能為力。有了GuruCE和TRACE32的整合方案你可以這樣做在TRACE32里正常連接目標(biāo)板配置好Trace采集的觸發(fā)條件比如檢測(cè)到CAN發(fā)送緩沖區(qū)的填充率超過(guò)閾值時(shí)開始記錄。讓固件按照客戶的工況長(zhǎng)時(shí)間運(yùn)行Trace數(shù)據(jù)持續(xù)寫入大容量的Trace存儲(chǔ)器。運(yùn)行結(jié)束后把整個(gè)Trace數(shù)據(jù)直接加載進(jìn)GuruCE的分析環(huán)境不需要做任何格式轉(zhuǎn)換。在GuruCE里查看CAN報(bào)文延遲時(shí)段的任務(wù)調(diào)度情況看具體是哪個(gè)中斷搶占了CAN發(fā)送任務(wù)延遲了多長(zhǎng)時(shí)間。再切換到覆蓋率視圖確認(rèn)這個(gè)場(chǎng)景下的代碼路徑是否和預(yù)期一致有沒(méi)有走了一些平時(shí)不走的異常分支。整個(gè)過(guò)程全部發(fā)生在同一套工具鏈里不需要重新燒錄、不需要插樁、不需要切換軟件環(huán)境。最關(guān)鍵在于這個(gè)分析是在真實(shí)運(yùn)行的數(shù)據(jù)上做的而不是在模擬環(huán)境或測(cè)試實(shí)驗(yàn)室里做的。4. 這次合作會(huì)給實(shí)際項(xiàng)目帶來(lái)哪些變化按場(chǎng)景拆解合作消息聽起來(lái)很美好但對(duì)不同領(lǐng)域的開發(fā)者來(lái)說(shuō)實(shí)際價(jià)值是不一樣的。我按幾個(gè)典型的應(yīng)用場(chǎng)景來(lái)拆解一下你看看自己是屬于哪一類。4.1 汽車電子功能安全認(rèn)證材料的短板補(bǔ)上了汽車電子是我覺(jué)得受益最大的領(lǐng)域。原因很簡(jiǎn)單ISO 26262對(duì)覆蓋率、時(shí)序、故障注入等的要求是全生命周期覆蓋的而且認(rèn)證審查極其嚴(yán)格。過(guò)去很多團(tuán)隊(duì)拿覆蓋率數(shù)據(jù)的方式還是評(píng)估版測(cè)試插樁這個(gè)方案應(yīng)付低等級(jí)還好到了ASIL D就會(huì)發(fā)現(xiàn)兩個(gè)致命問(wèn)題一是插樁覆蓋率數(shù)據(jù)很難證明在目標(biāo)硬件上真實(shí)運(yùn)行審查員會(huì)質(zhì)疑探針對(duì)時(shí)序的影響到底有多大你無(wú)法量化地回答。 二是測(cè)試場(chǎng)景和實(shí)際運(yùn)行場(chǎng)景之間存在差異現(xiàn)場(chǎng)問(wèn)題反饋到你這里時(shí)你很難還原客戶那邊的運(yùn)行狀態(tài)自然也就無(wú)從分析。GuruCE和Lauterbach的組合正好把這兩個(gè)短板補(bǔ)齊了。無(wú)侵入采集讓覆蓋率數(shù)據(jù)可以被審查員信任因?yàn)樵糡race數(shù)據(jù)就在那里硬件時(shí)序信息沒(méi)法造假。同時(shí)真實(shí)工況下記錄的Trace數(shù)據(jù)可以直接作為認(rèn)證材料證明你的系統(tǒng)在實(shí)際運(yùn)行中沒(méi)有出現(xiàn)未覆蓋的危險(xiǎn)路徑。這對(duì)認(rèn)證周期和溝通成本都是實(shí)打?qū)嵉母纳啤?.2 工業(yè)控制與電機(jī)驅(qū)動(dòng)偶發(fā)時(shí)序問(wèn)題的定位效率再來(lái)說(shuō)工業(yè)控制和電機(jī)驅(qū)動(dòng)。這個(gè)領(lǐng)域的工程師最頭疼的問(wèn)題不是功能邏輯不對(duì)而是偶爾不對(duì)。比如某臺(tái)變頻器在負(fù)載階躍變化時(shí)出現(xiàn)過(guò)壓保護(hù)某臺(tái)伺服驅(qū)動(dòng)器在長(zhǎng)時(shí)間運(yùn)行后位置精度出現(xiàn)微小漂移這些問(wèn)題的共同點(diǎn)是頻率低、持續(xù)時(shí)間短、復(fù)現(xiàn)條件苛刻。用傳統(tǒng)方式排查這類問(wèn)題基本是廣撒網(wǎng)加日志、加斷點(diǎn)、加示波器通道希望能在問(wèn)題發(fā)生的瞬間抓到異常。但日志和斷點(diǎn)本身就會(huì)改變時(shí)序很多時(shí)候你加了監(jiān)控手段問(wèn)題反而不出現(xiàn)了。而基于Trace的整合分析方案可以做到平時(shí)不干預(yù)系統(tǒng)只在Trace緩沖區(qū)里持續(xù)記錄等到故障發(fā)生后再回溯分析故障發(fā)生前的案發(fā)現(xiàn)場(chǎng)。我曾經(jīng)維護(hù)過(guò)一個(gè)老項(xiàng)目底層用的還是40MHz的MCU外部總線上掛著多個(gè)外設(shè)。有一次現(xiàn)場(chǎng)反饋說(shuō)信號(hào)采集偶爾會(huì)跳變我在調(diào)試器里掛了半天沒(méi)復(fù)現(xiàn)。如果當(dāng)時(shí)就有這種無(wú)侵入Trace分析環(huán)境我大概率能在幾分鐘內(nèi)定位到是某兩個(gè)外部中斷的優(yōu)先級(jí)配置在特定時(shí)序下出現(xiàn)了競(jìng)爭(zhēng)而不是靠猜測(cè)和反復(fù)試驗(yàn)。4.3 對(duì)中小團(tuán)隊(duì)來(lái)說(shuō)這降低了工具鏈試錯(cuò)成本可能有人會(huì)想Lauterbach TRACE32本來(lái)就是高價(jià)工具再疊加一個(gè)GuruCE是不是只有大廠才用得起這個(gè)擔(dān)憂有一定道理但從另一個(gè)角度看中小團(tuán)隊(duì)反而是這類整合的最大受益者。理由很簡(jiǎn)單中小團(tuán)隊(duì)通常沒(méi)有專門的工具鏈團(tuán)隊(duì)沒(méi)有能力自己開發(fā)調(diào)試器與覆蓋率工具之間的接口。兩個(gè)商業(yè)化工具要真正配合好往往需要相當(dāng)深的技術(shù)積累這對(duì)小團(tuán)隊(duì)來(lái)說(shuō)幾乎是不可能完成的任務(wù)?,F(xiàn)在官方已經(jīng)把集成做完了中小團(tuán)隊(duì)可以直接站在這個(gè)高度上使用省下了大量膠水開發(fā)和聯(lián)調(diào)踩坑的時(shí)間。另外對(duì)做方案評(píng)估的團(tuán)隊(duì)來(lái)說(shuō)現(xiàn)在多了一個(gè)技術(shù)維度來(lái)對(duì)比不同的調(diào)試工具選擇。如果GuruCE只支持TRACE32那這個(gè)數(shù)據(jù)格式的綁定關(guān)系本身就是一種決策依據(jù)你要是打算用TRACE32做調(diào)試那順手就能獲得一套完整的質(zhì)量分析能力不用再單獨(dú)評(píng)估覆蓋率工具和性能工具了。5. 作為工具鏈?zhǔn)褂谜呶业呐袛嗪筒僮鹘ㄗh最后這部分我從一個(gè)資深使用者的角度說(shuō)說(shuō)我自己的判斷以及如果你所在的團(tuán)隊(duì)打算接入這套生態(tài)應(yīng)該怎么入手、注意什么。5.1 我建議重點(diǎn)關(guān)注哪幾個(gè)集成能力既然是官方合作肯定不只是能讀文件那么簡(jiǎn)單。我建議你在評(píng)估或使用時(shí)重點(diǎn)確認(rèn)這幾個(gè)集成深度是否支持實(shí)時(shí)數(shù)據(jù)流傳輸還是只能離線導(dǎo)入導(dǎo)出如果能實(shí)時(shí)傳輸意味著你可以在調(diào)試的同時(shí)動(dòng)態(tài)查看分析結(jié)果。覆蓋率分析是否支持多核和異構(gòu)處理器現(xiàn)在很多車規(guī)芯片都是多核架構(gòu)甚至大小核Trace數(shù)據(jù)要能按核區(qū)分否則覆蓋率報(bào)告會(huì)混在一起無(wú)法區(qū)分。時(shí)序分析的時(shí)間戳分辨率是多少如果你的系統(tǒng)跑在200MHz以上時(shí)間戳精度至少要達(dá)到納秒級(jí)否則分析結(jié)果沒(méi)有參考價(jià)值。是否支持自定義觸發(fā)條件比如能不能按指定變量值、指定函數(shù)調(diào)用時(shí)機(jī)來(lái)觸發(fā)Trace的記錄這直接影響你針對(duì)特定場(chǎng)景做定向分析的能力。這些不僅是功能參數(shù)更是決定這個(gè)工具鏈?zhǔn)欠衲苷嬲谌肽悻F(xiàn)有開發(fā)流程的關(guān)鍵。5.2 上手前需要補(bǔ)哪些基礎(chǔ)工具再好也得上手才能變成生產(chǎn)力。根據(jù)我過(guò)去集成這類工具的經(jīng)驗(yàn)建議你在正式投入使用前先做三件事第一花時(shí)間理解你的芯片平臺(tái)的Trace能力。不同架構(gòu)的Trace硬件能力差異很大比如有些芯片的Trace只覆蓋指令執(zhí)行不包含數(shù)據(jù)訪問(wèn)有些芯片的Trace緩沖區(qū)只有幾KB無(wú)法抓取長(zhǎng)時(shí)間運(yùn)行的數(shù)據(jù)。這些限制直接決定了GuruCE能分析到什么程度。第二先在你最熟悉的測(cè)試用例上跑通全流程再鋪開到項(xiàng)目做完整驗(yàn)證。我見(jiàn)過(guò)太多團(tuán)隊(duì)一上來(lái)就在復(fù)雜系統(tǒng)上部署新工具結(jié)果在排查工具本身的問(wèn)題上耗了幾個(gè)星期。一定要先用一個(gè)小范圍、確定性的測(cè)試用例驗(yàn)證數(shù)據(jù)是可靠的再逐步放大。第三搭建一個(gè)Trace數(shù)據(jù)的歸檔機(jī)制。Trace文件體積非常大動(dòng)輒幾個(gè)GB如果不建立統(tǒng)一的存儲(chǔ)和命名規(guī)范兩周之后你就不知道該用哪份數(shù)據(jù)來(lái)分析什么了。建議按時(shí)間戳、構(gòu)建版本、測(cè)試場(chǎng)景三個(gè)維度來(lái)組織歸檔。5.3 幾個(gè)容易踩坑的注意事項(xiàng)再分享幾個(gè)我在實(shí)際使用類似工具時(shí)踩過(guò)的坑供你參考。一個(gè)是Trace深度和緩沖區(qū)大小的問(wèn)題。很多工程師以為Trace只要開著就能一直錄其實(shí)很多芯片的Trace緩沖區(qū)是有限的錄滿了之后會(huì)停止或者溢出。如果只開著默認(rèn)配置你很可能在觸發(fā)條件到來(lái)之前緩沖區(qū)就被刷掉了。所以一定要根據(jù)你的分析目標(biāo)預(yù)先想好觸發(fā)條件讓Trace記錄只保留你關(guān)心的那一段。另一個(gè)是優(yōu)化等級(jí)的問(wèn)題。Trace數(shù)據(jù)記錄的是編譯后的機(jī)器指令地址如果你用-O2甚至-O3優(yōu)化后去對(duì)比源代碼覆蓋率可能會(huì)看到一些奇怪的現(xiàn)象某些源程序行被合并了某些變量被優(yōu)化掉了覆蓋率報(bào)告看起來(lái)和代碼對(duì)不上。這并不是工具的問(wèn)題而是優(yōu)化編譯的固有現(xiàn)象。所以做覆蓋率分析時(shí)需要明確你的驗(yàn)證目標(biāo)如果是為了功能安全認(rèn)證可能需要用帶調(diào)試信息的優(yōu)化構(gòu)建來(lái)做映射如果只是為了日常分析-O0的構(gòu)建會(huì)更直觀一些。還有一個(gè)很容易忽略的點(diǎn)Trace采集雖然對(duì)目標(biāo)系統(tǒng)侵入極小但不是零影響。Trace本身要占用調(diào)試接口的帶寬如果芯片的調(diào)試時(shí)鐘頻率較低Trace數(shù)據(jù)可能無(wú)法實(shí)時(shí)傳輸這時(shí)候會(huì)需要CPU暫停來(lái)等待Trace緩沖區(qū)的排空。這個(gè)停頓在高負(fù)載情況下有可能會(huì)影響系統(tǒng)行為。所以拿到分析結(jié)果時(shí)最好多留個(gè)心眼確認(rèn)這次采集過(guò)程本身有沒(méi)有引入額外的時(shí)序擾動(dòng)。我自己的使用體會(huì)是這類調(diào)試分析一體化的工具鏈最大的價(jià)值不在于某一個(gè)單一功能有多強(qiáng)而在于它讓整個(gè)分析過(guò)程變得自然了。你不必再先假裝程序沒(méi)問(wèn)題然后再事后驗(yàn)證你可以在排查問(wèn)題的同時(shí)順便把質(zhì)量數(shù)據(jù)也采集了。這種工作方式的轉(zhuǎn)變對(duì)團(tuán)隊(duì)的質(zhì)量文化是有潛移默化影響的。等到你習(xí)慣了在調(diào)試的同時(shí)順手拿到覆蓋率報(bào)告和時(shí)序報(bào)告再回到傳統(tǒng)工具鏈會(huì)明顯覺(jué)得拖沓。