我爲非POSIX嵌入式系統編寫項目,因此無法使用gcc選項--coverage(我沒有讀取或寫入)。我還能做什麼來產生像gcov一樣的輸出。我有一個輸出功能。如何對嵌入代碼進行覆蓋
回答
它可以通過帶嵌入式跟蹤的處理器,暴露跟蹤端口的電路板設計以及合適的硬件調試器和相關軟件來完成。例如,許多基於Cortex-M的器件都包含ARM的嵌入式跟蹤宏單元(ETM),Keil的uVision IDE和ULINK-Pro調試器支持這種設備,以提供代碼覆蓋率和指令/源級跟蹤以及實時分析。硬件跟蹤的優點是非侵入性 - 代碼可以實時運行。
如果您沒有硬件支持,您可能不得不求助於模擬。許多工具鏈包括一個指令級仿真器,它將執行跟蹤,代碼覆蓋和分析,但您可能必須創建調試腳本或代碼存根以模擬硬件來強制執行所有路徑。
第三種替代方法是在帶有存根的桌面平臺上構建代碼,以取代目標硬件依賴關係,並對其執行測試和代碼覆蓋。您必須相信目標C編譯器和測試系統編譯器都會使用相同的語義翻譯源代碼。這裏的優點是可用的調試工具通常優於嵌入式系統可用的調試工具。在任何硬件可用之前,您還可以測試大部分代碼,並且在大多數情況下執行代碼的速度要快得多,可能允許進行更廣泛的測試。
沒有POSIX API並不排除使用GCC,它只是排除了使用GNU C庫。在沒有POSIX的嵌入式系統上,使用替代C庫,如Newlib。 Newlib有一個系統移植層,用於實現I/O和基本堆管理。
我們family of C/C++ test coverage tools儀器源代碼,產生程序,你與你的嵌入式編譯器來編譯,將收集的測試覆蓋率的數據變成了「小」數據結構添加到程序。這適用於各種方言,包括ANSI,GCC,Microsoft和GreenHills。
您必須將該數據結構從嵌入式執行上下文導出到PC上的文件;通常使用備用串行或並行端口以及特定於您的端口的一小部分自定義代碼很容易。這些工具將提供測試覆蓋率視圖和摘要結果文件。
因此,在大多數實際情況下,您可以使用這些工具從嵌入式系統收集測試覆蓋率數據。
免責聲明:我所工作的公司(Rapita Systems)提供針對嵌入式應用的代碼覆蓋解決方案。
因爲嵌入式系統帶來了自己的,特殊的和廣泛變化的需求,所以代碼覆蓋的「最佳」解決方案也有很大差異。
- 如果您有基於跟蹤的設備,如具有ETM或啓用了NEXUS的部件的ARM芯片,則可以在不通過調試器進行檢測的情況下執行覆蓋。
- 否則,你最有可能面臨着基於儀器的解決方案:
- 對於RAM有限的解決方案,很好地解決是寫儀器到I/O端口
- 或者,你可以記錄儀器來一個RAM緩衝區,並使用各種方法從目標中提取這些數據。
當然,很多代碼覆蓋率的不同口味的還有:函數,語句,決策/分支,MC/DC
- 1. DIV覆蓋YouTube嵌入代碼
- 2. 如何使用gcov與QMake進行代碼覆蓋
- 3. 代碼覆蓋率 - 哪個代碼覆蓋哪個代碼?
- 4. 改進Lombok @數據代碼覆蓋率
- 5. MSTest代碼覆蓋
- 6. Java - 代碼覆蓋
- 7. VS2013代碼覆蓋
- 8. 使用碼頭進行手動代碼覆蓋
- 9. 嵌入在Drupal頁面中的jQuery代碼將其css覆蓋
- 10. 嵌入式C++項目的代碼覆蓋率分析
- 11. 如何覆蓋Visual Studio代碼覆蓋範圍內的異常
- 12. Golang覆蓋嵌入函數
- 13. 代碼覆蓋率:.NET代碼覆蓋率和SonarQube VSTS集成
- 14. 如何處理代碼覆蓋?
- 15. Jenkins代碼覆蓋如何工作?
- 16. 如何最大化代碼覆蓋率?
- 17. 爲什麼這些行不被代碼覆蓋覆蓋?
- 18. 如何從Go二進制文件捕獲代碼覆蓋率?
- 19. Jest:忽略代碼覆蓋率的行
- 20. 無法運行EMMA代碼覆蓋率
- 21. 覆蓋RaisePropertyChanged來執行附加代碼
- 22. Sonar是否使用Jacoco插件進行代碼覆蓋
- 23. 對嵌入式linux內核代碼進行更改
- 24. 「代碼覆蓋」與「代碼測試」?
- 25. 使用版本代碼覆蓋代碼
- 26. 給定代碼的代碼覆蓋
- 27. 如何在函數中注入/覆蓋代碼?最佳實踐?
- 28. 如何使用Jacoco和多個模塊在Jenkins中進行代碼覆蓋?
- 29. 如何在iPhone SDK中設置gcov進行代碼覆蓋率分析?
- 30. 如何從嵌入代碼
代碼覆蓋率要少得多常見於嵌入式系統完成。但對你而言,一個好的答案需要關於你的系統的更多細節。什麼CPU?什麼OS?什麼編譯器工具鏈? – TJD 2011-12-19 18:01:00
你只需要寫功能或讀寫功能嗎?如果只是寫入(打開,關閉,寫入),你可以創建自己的,也許寫輸出到串行端口在其他地方存儲/記錄。 – 2011-12-19 18:36:55
是否可以在可以使用coverage選項的系統上編譯和運行測試? – 2011-12-19 21:30:55