偵測在裝置端執行的情形,定期收集並評估診斷資料,以判斷是否要產生當機報告 / 快照。
運作方式
每隔幾分鐘,偵測會讀取檢查狀態、評估觸發條件,
並將當機報告檔案提交至 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
指令列引數,即可覆寫這些限制。