代碼儀器涉及將其他代碼添加到程序中以監(jiān)視,測量和分析其執(zhí)行過程中的行為。本文涉及手動源代碼儀器,程序員確定記錄哪些信息以及何時登錄的信息。隨著系統(tǒng)變得越來越復雜,儀器變得越來越重要。 C ++由于其效率和接近硬件的功能而占主導地位的嵌入式系統(tǒng)開發(fā)。本文研究了儀器C/C ++代碼的實踐,強調了其優(yōu)勢和缺點,以幫助開發(fā)人員做出明智的決定。嵌入式系統(tǒng)對于現(xiàn)代技術至關重要,可以為各個行業(yè)提供動力。
為什么源代碼儀器很重要
嵌入式系統(tǒng)變得越來越復雜,相互聯(lián)系,難以理解和調試。許多項目依靠第三方,記錄不足或過時的代碼,使開發(fā)人員對他們正在更新或測試的內容有限。實時系統(tǒng)也不能在不影響結果或造成損害的情況下暫停。借助快速生成的數(shù)據(jù),固件必須包括數(shù)據(jù)記錄以捕獲實時信息,分析行為,提高性能并解決問題。傳統(tǒng)的調試方法不再足以用于所有復雜的嵌入式系統(tǒng)測試和調試挑戰(zhàn)。
記錄的歷史記錄對于分析難以復制的故障至關重要,因為它有助于識別根本原因,而不僅僅是解決癥狀。問題也可能是由硬件或外部因素引起的。與全局變量采樣或其他異步方法相比,Code Instrumentation提供了對固件執(zhí)行的更詳細的見解。簡單的同步方法,例如ARM Cortex SWV數(shù)據(jù)跟蹤,由于其較小的可變范圍提供了有限的見解。復雜的錯誤通常涉及硬件軟件交互,僅通過黑盒測試就難以解決。由于嵌入式系統(tǒng)是互連的,因此記錄的歷史記錄對于有效解決問題至關重要。即使是簡短的歷史記錄也可以提供有關錯誤或次優(yōu)性能的真正原因的重要信息。
嵌入式系統(tǒng)設計人員經(jīng)常使用本地儀器,例如定時測量或類似printf的功能來解決問題。但是,通常在解決問題后刪除該儀器,因此無法分析未來問題。即使它保留在代碼中,它也不全面,也不提供對系統(tǒng)的完整視圖。
示波器,邏輯分析儀和功率分析儀等儀器捕獲了通過嵌入式模塊控制或監(jiān)測的系統(tǒng)值。代碼儀器有助于我們了解軟件如何解釋測量方法,尤其是在電氣嘈雜的環(huán)境中。例如,在電力電子中,了解噪聲如何影響模擬輸入測量至關重要。同樣,固件對噪聲和故障的魯棒性無法外部測量。
嵌入式系統(tǒng)中的儀器帶來了許多好處,包括改進的調試,性能分析和更有效的測試。這有助于更高的軟件和整體系統(tǒng)質量。以下一節(jié)簡要介紹了其中一些好處,以使您了解可以使用哪種儀器。但是,儀器也有一些開發(fā)人員應意識到的局限性。這些也簡要介紹在單獨的部分中。然而,儀器是嵌入式系統(tǒng)設計人員的寶貴工具,可以進行早期故障檢測和系統(tǒng)優(yōu)化。
源代碼儀器的好處
1??冃?yōu)化:減少潛伏期,確定臨時性能降解的原因,識別瓶頸(測量執(zhí)行時間和資源使用情況),定位性能熱點以及軌道改進,以確保有效的優(yōu)化響應性和性能。
2。高級監(jiān)視和可觀察性:提供對應用程序行為,性能,時機和資源使用情況的實時可見性,從而實現(xiàn)主動的問題解決。它跟蹤函數(shù)調用,可變值,系統(tǒng)狀態(tài)和代碼覆蓋范圍,以確保正確性并更好地理解復雜的交互。深入研究系統(tǒng)的運行方式通常會揭示最初不考慮的事物(不是規(guī)格的一部分)。
3。提高調試:加速故障排除和調試,減少停機時間并盡早發(fā)現(xiàn)潛在的問題。它還確保系統(tǒng)滿足設計和操作要求。
4。找到難以生產(chǎn)的錯誤:即使是簡短的歷史記錄也可以揭示原因。也可以用于壓力測試和/或模糊來復制錯誤和日志歷史記錄以識別實際原因。
5。避免延遲延遲:項目早期的儀器代碼可以盡早發(fā)現(xiàn)錯誤和效率低下。同時,它可以防止需要晚期重新設計。
6.提高固件質量:更好地了解固件可以幫助更快地識別剩余問題,消除瓶頸,提高可靠性和安全性,減少錯誤警報等。
7。測試質量保證:啟用測試自動化,回歸測試,故障注射(例如,儀器可以在故障注射后捕獲內部行為),代碼覆蓋范圍分析等。
8。更好的代碼理解:通過將儀器點放置在復雜或記錄不足的代碼中,開發(fā)人員可以分析代碼的邏輯并確定問題領域。
9.文檔支持:生成可用作系統(tǒng)行為參考材料的日志和報告;包括確認進行測試。
10。提高安全性:記錄的歷史記錄可以提供有關出了問題的寶貴見解(例如,意外操作員錯誤或事件的意外組合),并允許改善安全算法。
11.提高能源效率:優(yōu)化不必要地加載CPU或延遲睡眠的代碼片段可以顯著降低功耗,這是電池動力系統(tǒng)的關鍵因素。
限制源代碼儀器的因素
1。性能開銷:添加儀器可以減慢程序的執(zhí)行,從而使其不適合至關重要或硬實時系統(tǒng)。
2。代碼復雜性:儀器提高了復雜性,這可能會使維護更加困難。
3.資源使用:儀器會消耗額外的內存和處理能力,在資源約束環(huán)境中可能會過時。
4.行為修改:儀器改變程序行為,包括時間。不應在發(fā)布中將其刪除,因為可能會在用儀器代碼測試期間檢測到的時序問題。
5。安全風險:儀器可以暴露敏感數(shù)據(jù)或創(chuàng)建可剝削的漏洞。
6。有限的可伸縮性:在大型或分布式系統(tǒng)中,管理和分析數(shù)據(jù)可能是復雜且資源密集的。在沒有深入了解其運營歷史的情況下測試此類系統(tǒng)也很具有挑戰(zhàn)性。
7.上下文依賴性:可能需要針對不同的平臺或環(huán)境定制儀器。
8.缺乏標準化使得很難重復使用儀器模塊。
9.來自多核或分布式系統(tǒng)的日志數(shù)據(jù)匯總困難。
可以通過選擇正確的儀器庫并正確實施上述大多數(shù)限制可以避免或最小化。不能保證測試人員將擁有所需的記錄數(shù)據(jù)來分析難以重復的問題,或者將歷史記錄在足夠的時間內可用。對主機的日志內存和帶寬是有限的,只有儀器的代碼的一部分才能提供歷史記錄。不太了解的儀器代碼可能會導致數(shù)據(jù)收集不正確。單個錯誤可能導致幾種不同的失敗癥狀。盡管有歷史記錄,但確定實際原因并不總是那么容易。但是,記錄增加了找到失敗的真正原因的可能性。
代碼儀器不適合簡單項目,除非我們需要學習新的儀器工具包,或者它是實時控制系統(tǒng),并且我們希望同步從系統(tǒng)中收集數(shù)據(jù),而不必擔心如何將數(shù)據(jù)從嵌入式系統(tǒng)導出到CSV文件或傳播表格。對于落后于計劃的項目而言,這也不是理想的選擇,因為它需要時間來啟動大型代碼庫和學習新工具。
那些對當前儀器方法缺點的人感興趣的人應參考附錄1中此主題的概述。
靈活和微不足道的儀器的特征
為儀器添加的任何代碼(數(shù)據(jù)記錄功能和/或宏),無論多么最佳,都會影響代碼尺寸和執(zhí)行速度。這些效果必須最小化。輕質和靈活儀器的關鍵要求是:
1。 盡可能快地運行,以最大程度地減少對固件的影響。
2。 使用最小的堆??臻g來最大程度地減少代碼儀器后堆棧溢出的可能性,從而使解決方案適合集成到現(xiàn)有項目中。
3。 小型程序內存足跡,以使集成到資源受限的系統(tǒng)中。
4。 有效地編碼并將數(shù)據(jù)存儲在圓形緩沖區(qū)中,以最大化相同的緩沖區(qū)大小的歷史記錄。開發(fā)人員需要足夠的上下文來確定問題,同時最大程度地減少內存使用情況。這減少了上傳時間,并降低了云方面的運營成本,尤其是對于物聯(lián)網(wǎng)警報或按需消息傳遞和存儲。
5。時間戳:必須對記錄數(shù)據(jù)進行時間戳,因為時間對于大多數(shù)嵌入式系統(tǒng)很重要。
6。 綜合數(shù)據(jù)收集:所有類型的數(shù)據(jù)和事件的日志(從應用程序數(shù)據(jù)到RTOS事件)。
7。 允許過濾在嵌入式系統(tǒng)中記錄的數(shù)據(jù),并在主機上解碼期間對數(shù)據(jù)進行分類/選擇數(shù)據(jù)以管理數(shù)據(jù)泛濫。過濾還可以使您可以在更詳細和更短的歷史或更詳細且更長的歷史記錄之間進行選擇。
8。 要便攜式,以便開發(fā)人員可以在其所有或大多數(shù)項目上使用它。
9。 適用于大多數(shù)嵌入式系統(tǒng),從裸金屬到基于RTOS的系統(tǒng),包括資源受限的系統(tǒng)。
10。與特定硬件或軟件(例如調試探針,特定IDE或RTOS) 無關。
11。 允許對已記錄信息有效分析。
12。 易于學習和使用。