CodeTracer 推出支援 Noir 的時間旅行除錯功能,社群期待擴充套件至主流程式語言

BigGo Editorial Team
CodeTracer 推出支援 Noir 的時間旅行除錯功能,社群期待擴充套件至主流程式語言

時間旅行除錯一直是開發者的夢想,而 CodeTracer 正在將這一夢想變為現實,首先支援了 Noir 程式語言。這款新發布的工具允許開發者將程式執行過程記錄到一個獨立的追蹤檔案中,並可在圖形介面環境中檢查,使開發者能夠在程式碼執行過程中前後移動。

社群反饋突顯對更廣泛語言支援的需求

雖然初始版本專注於 Noir(一種用於零知識證明中的 SNARK 證明系統的領域特定語言),但開發者社群熱切期待支援更多主流語言。使用者評論顯示,他們對 Python、Ruby、JavaScript/TypeScript 以及像 Rust 和 C++ 這樣的系統語言特別感興趣。該專案的路線圖中已包含實驗性的 Ruby 支援,Python 整合也正在進行中。

「我需要一個 VSCode 擴充套件來使用這個工具。但是,唉,這只是放在他們的路線圖上...典型的做法。看來我得自己動手開發一個了。好像我手頭的工作還不夠多似的。至少他們的追蹤檔案是開放格式的,所以連線到 VS Code 除錯 API 應該不是不可能的。」

針對這一觀點,CodeTracer 團隊正積極尋求貢獻者幫助開發這些擴充套件,表明了他們對社群參與專案發展的重視。

CodeTracer 當前語言支援

  • 完全支援: Noir (區塊鏈/零知識證明語言)
  • 實驗性支援: Ruby
  • 開發中: Python
  • 計劃支援: 各種指令碼語言,透過 rr 整合支援系統語言

實現方法

  • 指令碼/區塊鏈語言: 基於資料庫的方法,透過直譯器插樁
  • 系統語言: 基於 Mozilla 的 rr 記錄技術(僅限 Linux)

平臺支援

  • 當前: Linux (主要)
  • 部分支援: macOS (適用於指令碼/區塊鏈語言)
  • 開發中: Windows (適用於指令碼/區塊鏈語言)

不同語言型別採用不同的技術實現

CodeTracer 採用兩種不同的方法記錄程式執行。對於像 Noir 和 Ruby 這樣的指令碼和區塊鏈語言,它透過高階鉤子 API 或直接補丁來改裝直譯器以生成追蹤。對於系統語言,團隊則基於 Mozilla 的 rr 偵錯程式記錄構建,該記錄可以捕獲使用者空間中的多個程序。

這種雙重方法反映了在不同語言生態系統中實現時間旅行除錯的各種挑戰。系統語言後端目前仍然是閉源的,不過團隊表示,如果能找到可持續的商業模式,他們有興趣將其開源。

一個顯示程式碼和執行輸出的終端介面,與程式語言和除錯相關,反映了 CodeTracer 實現的技術複雜性
一個顯示程式碼和執行輸出的終端介面,與程式語言和除錯相關,反映了 CodeTracer 實現的技術複雜性

效能和實用性問題

社群討論突顯了對追蹤檔案大小和效能開銷的擔憂,特別是對於長時間執行的程式。當前基於 JSON 的追蹤格式被認為不是最優的,團隊計劃在未來版本中採用更高效的格式。一些評論者還提出了關於時間旅行除錯在生產環境中實用性的問題,因為追蹤檔案可能會迅速增加。

CodeTracer 團隊已經概述了類似於 Jaeger 和 OpenTelemetry 的分散式追蹤平臺計劃,該平臺將持續記錄微服務之間的執行情況。與現有平臺僅捕獲訊息流不同,他們的系統將允許準確重放處理程式碼,以識別異常的根本原因。

跨平臺限制

目前,系統語言後端依賴於 rr,而 rr 僅支援 Linux,這對 macOS 和 Windows 使用者造成了限制。團隊正在為指令碼和區塊鏈語言後端開發 Windows 支援,而 macOS 支援仍然是一個挑戰。這種平臺限制引發了關於除錯工具在各作業系統可用性的更廣泛討論。

時間旅行除錯並非完全新穎——一些評論者指出了現有的解決方案,如用於 Clojure 的 Flowstorm、用於瀏覽器的 Replay.io 和用於 Java 的 Undo。然而,CodeTracer 為多種語言建立統一介面的方法代表了除錯技術的一個雄心勃勃的進步。

隨著專案的發展,開源和專有元件之間的平衡可能會影響其採用率。核心團隊包括 Nim 程式語言的知名貢獻者,他們使用 Nim 和 Rust 構建了 CodeTracer,引用了 Nim 的超程式設計支援和 Rust 與區塊鏈語言的生態系統整合的優勢。

對於那些厭倦了在程式碼中新增追蹤語句或在除錯會話中跨過關鍵點而失去上下文的開發者來說,CodeTracer 提供了一個令人期待的未來願景,在這個未來中,一旦捕獲了 bug,就能真正將其消滅。

參考:CodeTracer: A User-Friendly Time-Traveling Debugger