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