一、比 Clang-Tidy 更深层的分析
Clang-Tidy 是"模式匹配"(找常见的代码模式问题),Clang Static Analyzer 是符号执行(模拟代码的执行路径)。
# 方法 1:用 scan-build 替代编译命令
scan-build make -j4
# 方法 2:直接分析单个文件
clang --analyze source.cpp -std=c++17
二、它能找到 Clang-Tidy 找不到的问题
// 1. 资源泄漏
void leak_example() {
FILE* f = fopen("data.txt", "r");
// 忘了 fclose(f)
// clang-tidy 不会报告,但 scan-build 会标记"资源泄漏"
}
// 2. 野指针路径
void branch_bug(bool condition) {
int* p = nullptr;
if (condition) {
p = new int(42);
}
// 如果 condition = false,p 还是 nullptr
*p = 0; // scan-build 警告:possible null pointer dereference
}
// 3. 死代码(Dead code)
bool always_true(int x) {
if (x > 0) {
return true;
}
return true; // 永远不会执行的代码
}