覆盖率、性能、长时间跟踪回放,
一次插桩,三件事都答得上来。
面向 C/C++ 工程的代码分析工具。一套插桩同时产出三类结果:结构覆盖率、函数级耗时、执行路径回放。每次执行都留痕——插了什么、跑到哪、与上一版的差异。
从建工程,到看见三种数字。
下面六屏都是产品真实界面。四个场景共用同一套工程与插桩:选覆盖率,看到四个口径;选时序分析(就是性能),看到函数耗时与 p50–p99;选长时间跟踪回放,看到的是一行行执行路径。
四个场景,四种产出。
覆盖率、时序、追踪常被笼统叫成「测试分析」。它们其实回答三个不同的问题,也各有明确不做的部分 —— 边界先说清,数字才可信。
问:这个函数、这行代码被执行到了没有?够不够 ASIL B / DAL C / SIL 3 的要求?
给:支持四类覆盖率 —— 函数覆盖率(C0)、语句覆盖率(SC)、分支覆盖率(DC)、MC/DC 覆盖率。按 ISO 26262、DO-178C、IEC 61508、EN 50716 的等级要求,自动推导这一轮要采哪几类。MC/DC 按独立配对数计,不报百分比。
不做:不采语句级时间戳;源码或构建指纹不同,不做跨版本合并。
问:哪个函数最慢?调用多频繁?两行代码之间隔了多久?
给:只在函数边界读钟 —— 调用次数、总耗时、自身耗时、平均值与分位耗时(p50–p99)、最慢一次、调用边、两点区间;可按历史执行做跨轮次对比。
不做:不做 WCET、抖动、截止期判定。
问:它到底按什么顺序跑的?调用栈有多深?这一行是什么时候执行的?
给:函数进出记录成事件流,按线程分组的时间线,可逐步前后翻,点某行跳回原始或插桩后源码。支持长时间采集,达到容量上限自动停止并记录丢弃数。
不做:不跨进程合并时间线(时钟基准不同);环形缓冲与 Qt 信号槽语义追踪仍是 Phase 2。
问:能不能跑一次,同时给我覆盖率、耗时和回放?
给:一次运行三路同采(覆盖 + 耗时 + 事件流),把「走到了哪、花了多久、怎么走的」对齐到同一次执行。
代价:开销最大,耗时含采集开销,不能当性能基准 —— 要干净的数,单独建时序工程。
每条数字都能追到源头。
下面五条不是功能列表,是产品在具体环节上的处理方式。
先选标准与等级 —— ISO 26262 ASIL A–D、DO-178C DAL A–D、IEC 61508 与 EN 50716 SIL 1–4,由工具反推这一轮要采哪几类覆盖证据,再进采集配置。
原始源码与插桩后源码并排显示、逐行标色:插了什么、插在哪、哪行还没跑到。覆盖率对不上时,直接定位到具体行。
只在副本上插桩,原文件留一份备份;同一份源码被第二个工程拿去插桩会被拦住,并给出恢复方式。不改动原始文件。
构建失败、工具链没认出来、探针数对不上,界面就直说失败并给出原因,不拿上一次的数字顶上。覆盖率工具最贵的不是功能,是"它说的数我敢不敢签"。
融合采集一次给出覆盖率、耗时、回放,但它的耗时含插桩与写盘开销。报告里会标注这一点;要报性能数字,单独建一个时序工程。
全程离线,装在工位上就能跑。
函数 C0、语句 SC、分支 C1·DC、判定 MC/DC;按 ISO 26262 / DO-178C / IEC 61508 反推要采哪几类,按函数逐行列出来。
调用次数、inclusive / exclusive、平均、p50–p99、最慢一次、函数周期、调用边、两点区间。不做 WCET 与抖动。
函数进出事件流 → 按线程分组的调用栈时间线;容量闸按条数与字节兜底,回放分页 240 步,点行跳源码。
cov + time + trace 三路同开,把「走到了哪 + 花了多久 + 怎么走的」对齐到同一次运行。耗时标注含采集开销。
函数进入退出、语句到达、分支选取、条件判定(MC/DC)。探针集合由场景与标准等级决定。
主界面走 WebView2,老机器用浏览器模式只监听本机;C / C++ 接你自己的工具链(MinGW、MSVC、Qt),不改构建脚本。全程离线。
想看看它跑在你自己工程上的样子?
现在还是内测版,不挂公开下载。如果你是 C/C++ 团队 —— 不管是缺一份能签字的覆盖率证据、想找出哪个函数拖慢了节拍、还是要复现一次说不清的执行顺序,我都可以带你跑一遍:用你自己的工程,在你的机器上,离线。
关于截图:界面截图取自本机实测(v0.5.0 修复版,2026-11-01)—— 覆盖率、时序、执行回放三种产出都在里面;数字来自包内自带的公开样例(01_single_file、bench),不含任何客户代码。
关于版本:v0.5.0 还在内测,已知问题在修 —— 包括 MC/DC 的完整性校验、以及部分工具链的自动识别。这些不藏着,正式版会补上。