跳至內容

追蹤/記錄

Rolldown 的程式碼庫中有許多 tracing::debug! (或 tracing::trace!) 呼叫,這些呼叫會在許多點列印出記錄資訊。這些呼叫非常有用,至少可以縮小錯誤的位置,即使無法完全找出錯誤,或僅僅讓您了解編譯器執行特定動作的原因。

若要查看記錄,您需要將 RD_LOG 環境變數設為您的記錄篩選器。記錄篩選器的完整語法可以在 tracing-subscriber 的 rustdoc 中找到。

用途

RD_LOG=debug [executing rolldown]
RD_LOG=debug RD_LOG_OUTPUT=chrome-json [executing rolldown]

新增記錄

在您的公關中新增 tracing::debug!tracing::trace! 呼叫是可以的。但是,為避免記錄中出現雜訊,您在選擇 tracing::debug!tracing::trace! 時應小心。

有一些規則可以幫助您選擇正確的記錄等級

  • 如果您不知道要選擇哪個水準,請使用 tracing::trace!
  • 如果記錄訊息只會在捆綁期間列印一次,請使用 tracing::debug!
  • 如果記錄訊息只會列印一次,但內容的大小與捆綁期間的輸入規模有關,請使用 tracing::trace!
  • 如果記錄訊息將在捆綁期間列印多次但有限,請使用 tracing::debug!
  • 如果記錄訊息將因為輸入規模而列印多次,請使用 tracing::trace!

這些規則也適用於 #[tracing::instrument] 屬性。

  • 如果函式只會在捆綁期間呼叫一次,請使用 #[tracing::instrument(level = "debug", skip_all)]
  • 如果函式會因為輸入規模而呼叫多次,請使用 #[tracing::instrument(level = "trace", skip_all]

資訊

哪些資訊應該被追蹤可能是有爭議的,因此審查者將決定是否讓您保留追蹤陳述,或是在合併之前要求您移除它們。

函式級別篩選器

rolldown 中有很多函式附有註解

#[instrument(level = "debug", skip(self))]
fn foo(&self, bar: Type) {}

#[instrument(level = "debug", skip_all)]
fn baz(&self, bar: Type) {}

這允許您使用

RUSTC_LOG=[foo]

一次執行以下所有操作

  • 記錄所有對 foo 的函式呼叫
  • 記錄參數 (除了 skip 清單中的參數)
  • 記錄所有內容 (來自編譯器中的其他任何位置),直到函式傳回

注意事項

我們通常建議使用 skip_all,除非您有充分的理由對參數進行記錄。

追蹤模組解析

Rolldown 使用 oxc-resolver,該功能會公開追蹤資訊以利偵錯。

bash
RD_LOG='oxc_resolver' rolldown

這會針對 oxc_resolver::resolve 函式發出追蹤資訊,例如。

2024-06-11T07:12:20.003537Z DEBUG oxc_resolver: options: ResolveOptions { ... }, path: "...", specifier: "...", ret: "..."
    at /path/to/oxc_resolver-1.8.1/src/lib.rs:212
    in oxc_resolver::resolve with path: "...", specifier: "..."

輸入值為 optionspathspecifier,傳回值為 ret

以 MIT 授權條款發行。