追蹤/記錄
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: "..."
輸入值為 options
、path
和 specifier
,傳回值為 ret
。