Call Graph Analyzer(CGA)是一個開源工具,用來找出 Rust 程式碼中隱藏的 panic(不可恢復的錯誤導致程式崩潰)。這個專案由荷蘭顧問公司 Tweede Golf 與微軟合作,在開放設備夥伴關係(Open Device Partnership)框架下開發,作者是嵌入式軟體顧問 Wouter。團隊表示常被問到「該如何排除 Rust 程式碼中的 panic」,CGA 就是為了系統化解決這個問題而生,對程式碼大小與可靠性要求嚴格的嵌入式系統格外實用。
CGA 以 MIR(中間表示,Mid-level Intermediate Representation)分析方式運作,本身是一個 rustc 驅動程式。它從程式進入點開始,遍歷編譯過程中產生的中間代碼樹,追蹤所有可能的函式呼叫路徑,包括泛型單態化後產生的實例、虛擬表、函式指標與非同步程式碼中隱含的呼叫。使用者只要在專案裡執行 cargo cga check 指令,就能檢查出哪些函式呼叫路徑最終可能導致 panic。
CGA 的特點是能分析所有相依套件的程式碼,包括標準庫本身,並提供可設定的白名單與黑名單機制,讓開發者可以指定信任特定函式,或直接禁止呼叫特定函式庫。這對需要嚴格把關每個崩潰來源的嵌入式開發特別有價值。缺點是分析速度比一般的 cargo check 慢約 2 到 3 倍,而且綁定特定版本的 rustc,升級編譯器時可能需要跟著更新工具。
對剛開始學 Rust 或寫嵌入式程式的孩子來說,這個工具可能還用不到,但背後的概念很值得理解:程式裡看不到的錯誤,往往藏在函式層層呼叫的路徑裡,而工程師可以寫工具自動把這些路徑找出來,而不是只靠人工檢查。這也說明了為什麼大公司會花力氣投資開發輔助工具,而不是只靠寫程式的人小心一點。
Rust開源開發工具