开启clang-tidy的clang-analyzer-*检查后scan-build是否冗余?
clang-tidy开启
clang-analyzer-*检查后使用scan-build是否冗余 结论
大部分常规场景下属于冗余操作,仅少数特殊需求场景下仍有保留价值。
具体说明
- 底层逻辑一致:clang-tidy的
clang-analyzer-*系列检查,直接复用了scan-build底层依赖的Clang静态分析器核心能力,常规的空指针解引用、内存泄漏、未定义行为等通用静态分析问题,两者的检测结果没有本质差异。 - 两者的差异仅存在于功能配置层面:
- scan-build默认开启Clang静态分析器的全量检查,同时支持跨翻译单元的全程序分析(WPA);clang-tidy的
clang-analyzer-*默认仅开启基础检查子集,且默认仅执行单翻译单元分析,如果你没有手动给clang-tidy配置全量分析器检查、也没有开启跨单元分析,scan-build仍可能覆盖到clang-tidy漏检的问题。 - scan-build原生支持生成带问题触发路径的可视化HTML报告,clang-tidy的默认输出仅包含问题位置和描述,路径追踪的展示效果远不如scan-build直观。
- scan-build默认开启Clang静态分析器的全量检查,同时支持跨翻译单元的全程序分析(WPA);clang-tidy的
实践建议
如果你的clang-tidy已经手动开启了全部clang-analyzer-*检查,且不需要scan-build的跨单元分析、可视化报告能力,就可以直接停用scan-build,不会出现常规静态分析问题漏检;如果有上述特殊需求,可以保留scan-build作为补充检查手段。
内容的提问来源于stack exchange,提问作者tbre
相关产品推荐
相关产品推荐

