检测快照归档

检测设备上的运行情况,定期收集和评估诊断数据,以决定是否生成崩溃报告 / 快照。

运作方式

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 中完成:

  1. 将文件添加到 detect_conditional_files(而非 detect_unconditional_files
  2. 创建新的 config_data() 条目;按照惯例,其目标名称应与文件名相同
  3. 将该目标添加到相应的组,以便该文件与它应该分析的任何组件一起包含在内

如需查看示例,请点击此处

细则

如果您要在桌面设备上使用 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 命令行参数来覆盖这些限制。