偵測在裝置端執行的情形,定期收集並評估診斷資料,以判斷是否要產生當機報告 / 快照。
運作方式
每隔幾分鐘,偵測會讀取檢查狀態、評估觸發條件,
並將當機報告檔案提交至 FuchsiaDetect 產品。頻率
系統會在
//src/diagnostics/detect/meta/triage-detect.cml。
目前不會讀取檢查以外的診斷狀態。SyslogHas(), KlogHas() 和 BootlogHas() 一律會傳回 false。
啟用當機報告
根據預設,偵測功能會在所有產品和版本中執行,但只會建立或建立檔案
部分版本的當機報告否則會記錄警告:
Detect would have filed {},其中 {} 會替換為快照簽章。
偵測以下項目僅會產生當機報告:
"//src/diagnostics/detect:enable-report-filing"已包含在
--with-base。
當機報告只會在某些建構設定中傳送至伺服器,或者 已明確啟用,如當機回報中所述。
快照觸發條件
快照觸發條件存放在
//src/diagnostics/config/triage/detect 目錄內。新增到那個位置的檔案
必須同時將目錄新增至 detect_unconditional_files 中的
//src/diagnostics/config/triage/BUILD.gn。
.triage 檔案為標準的 Triage 格式。偵測功能會新增一個 act 類型:
snapshot_action: {
type: "Snapshot",
trigger: "something > something_else",
repeat: "Hours(6)",
signature: "a-string-with-restrictions",
}
- 就像
Warning類型動作一樣, Triage-lib 會評估trigger。 - 如果條件持續,
repeat會在重新編譯前,提供最短延遲時間。 或是重複執行的時間可使用Days()、Hours()和Minutes()。如果repeat的值小於後者的MINIMUM_SIGNATURE_INTERVAL_NANOS而系統會記錄警告訊息。 - 「
signature」會回報在當機報告中。fuchsia-detect-會加在簽章前面。- 簽名只能使用小寫英文字母和連字號 (無空格或底線)。不限字元 這個集合以外的值會小寫,或者轉換為連字號和錯誤 記錄。
- 多個快照動作可能會使用相同的簽章。已提交當機報告
都是相同的將套用
repeat節流 每個特徵而非按動作劃分,並使用
條件式檔案納入
偵測設定檔只能納入部分建構作業中,或者
很少直接解答該如何打造產品您可以在 //src/diagnostics/config/triage/BUILD.gn 中執行以下操作:
- 將檔案新增至「
detect_conditional_files」 較detect_unconditional_files - 建立新的
config_data()項目;按照慣例 與檔案名稱相同 - 正在將目標新增至適當群組,以便納入檔案 與任何需要分析的元件
請參閱這裡的範例。
詳細規定
如果您要在電腦上使用偵測偵錯功能,請參閱本節說明。
repeat 其實是 Triage eval 運算式,例如 trigger,且可以是
並以「檢查」資料動態計算運算式必須得出
奈秒的整數值。
「偵測」診斷資料的檢查頻率是由
已設定 --check-every 的指令列參數
//src/diagnostics/detect/meta/triage-detect.cml。(這個運算式必須
只能包含常數)。
偵測功能內建時間延遲限制;就會發生錯誤
--check-every小於 MINIMUM_CHECK_TIME_NANOS,將會
請至少延遲 MINIMUM_SIGNATURE_INTERVAL_NANOS 重新剖析快照。
只要新增 --test-only 指令列引數,即可覆寫這些限制。