检测设备端运行,定期收集和评估诊断数据,以决定是否生成崩溃报告 / 快照。
工作原理
每隔几分钟,检测功能会读取检查状态,评估触发条件,
并将崩溃报告提交给 FuchsiaDetect
产品。调用
诊断扫描由 中的命令行参数设置
//src/diagnostics/detect/meta/triage-detect.cml
。
目前无法读取除“检查”以外的诊断状态。SyslogHas(), KlogHas() 和 BootlogHas() 将始终返回 false。
启用崩溃报告
默认情况下,检测在所有产品和 build 中运行,但仅创建或文件
某些 build 中的崩溃报告。否则,它会记录警告:
Detect would have filed {}
,其中 {}
替换为快照签名。
仅当出现以下情况时,检测功能才会生成崩溃报告:
"//src/diagnostics/detect:enable-report-filing"
包含在
--with-base
。
只有在某些 build 配置中,或在以下情况下,崩溃报告才会发送到服务器: 如崩溃报告中所述,已明确启用。
快照触发器
快照触发器位于
//src/diagnostics/config/triage/detect
目录中。添加到该文件夹的文件
目录添加到 detect_unconditional_files
//src/diagnostics/config/triage/BUILD.gn
。
.triage 文件是标准的 Triage 格式。Detect 会添加新的 act
类型:
snapshot_action: {
type: "Snapshot",
trigger: "something > something_else",
repeat: "Hours(6)",
signature: "a-string-with-restrictions",
}
- Triage-lib 对
trigger
进行评估,就像在Warning
类型的操作中一样。 - 如果条件持续存在,则
repeat
会提供重新提交前的最短延迟时间 或重复。它可以使用Days()
、Hours()
和Minutes()
。如果 “repeat
”值小于MINIMUM_SIGNATURE_INTERVAL_NANOS
且系统会记录一次警告。 signature
会在崩溃报告中报告。fuchsia-detect-
会附加到签名前面。- 签名只能包含小写字母和连字符 (不得包含空格或下划线)。任意字符 将转换为小写形式或转换为连字符,并且会显示错误 将会被记录下来。
- 多项快照操作可能具有相同的签名。提交的崩溃报告
完全相同将应用
repeat
节流 每个签名,而不是每个操作,使用 触发。
包含条件文件
检测配置文件只能包含在一部分 build 中,或
产品。此操作可通过执行以下操作在 //src/diagnostics/config/triage/BUILD.gn
中完成:
- 改为将文件添加到
detect_conditional_files
高于detect_unconditional_files
- 创建新的
config_data()
条目;按照惯例,其目标名称应为 与文件名相同 - 将该目标添加到相应的组中,以便将文件随同 以及它应该分析的任何元素
相关示例请参见此处。
细则
如果您在桌面设备上使用检测功能进行调试,请阅读本部分。
repeat
实际上是类似 trigger
的分类评估表达式,可以是
根据检查数据动态计算得出。表达式的计算结果必须是
整数,以纳秒为单位。
“检测”功能检查诊断数据的频率由
--check-every
命令行参数(在
//src/diagnostics/detect/meta/triage-detect.cml
。(此表达式必须
仅包含常量。)
Detect 对时间延迟有内置限制;如果出现以下情况,则系统会退出并显示错误
--check-every
小于 MINIMUM_CHECK_TIME_NANOS
,将会
将重新归档快照延迟至少 MINIMUM_SIGNATURE_INTERVAL_NANOS
。
可以通过添加 --test-only
命令行参数来替换这些限制。