如何让Clang Static Analyzer从命令行输出?

Jet*_*ype 15 c++ linux command-line clang clang-static-analyzer

我在Ubuntu 12.10上运行Clang 3.4(来自http://llvm.org/apt/).我在一些代码上运行了分析器(clang --analyze),它发现了一些问题:

Blah.C:429:9: warning: Declared variable-length array (VLA) has zero size
        unsigned char separatedData[groupDataLength];
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

但具体问题并不重要.我想知道它是如何得出这个结论的步骤(代码很复杂,我不能在15分钟内看到它).

我看到Clang网站的截图,显示了在网络浏览器中查看的工作步骤:

截图

这可能是从Xcode获得的.

问题是:如何让Clang从命令行输出这些工作步骤?如果愿意,甚至可以将结果输出到浏览器?这将使分析仪显着更有用,并使修复更快.

(我注意到GCC的文档非常优秀,但Clang/LLVM的文档很差.我已经尝试过"clang --analyze -Xanalyzer'-v'"作为黑暗中的刺,告诉分析仪更详细 - -Xanalyzer开关来自手册页.)

bam*_*s53 20

除了控制台上的文本输出:

clang++ --analyze -Xanalyzer -analyzer-output=text main.cpp
Run Code Online (Sandbox Code Playgroud)

你可以获得完整的html输出:

clang++ --analyze -Xanalyzer -analyzer-output=html -o html-dir main.cpp
Run Code Online (Sandbox Code Playgroud)

此外,您可以选择要启用的特定检查器.此页面列出了可用的检查.例如,您可以使用标志启用Alpha组中的所有C++检查:

-Xanalyzer -analyzer-checker=alpha.cplusplus
Run Code Online (Sandbox Code Playgroud)

http://coliru.stacked-crooked.com/a/7746c4004704d4a7

main.cpp:5:1: warning: Potential leak of memory pointed to by 'x'
}
^
main.cpp:4:12: note: Memory is allocated
  int *x = new int;
           ^~~~~~~
main.cpp:5:1: note: Potential leak of memory pointed to by 'x'
}
^
Run Code Online (Sandbox Code Playgroud)

显然前端暴露出来

-analyzer-config <选项名称> = <值>

例如

-analyzer-config -analyzer-checker=alpha.cplusplus
Run Code Online (Sandbox Code Playgroud)

这可能会得到更好的支持,-Xanalyzer并且可能会扩展到支持各个检查器的选项:http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-October/039552.html


Ben*_*ier 6

你是在正确的轨道上,但要获得导致错误的完整踪迹,你还需要以文本格式询问clang输出(不要问为什么).因为您可能需要调整例如包含路径或项目定义,我建议您使用clang-check哪个作为clang分析器传递的包装器.它还可以挂入例如暴露的静态分析仪工具中scan-build.那你可以

$ clang-check -analyze -extra-arg -Xclang -extra-arg -analyzer-output=text
Run Code Online (Sandbox Code Playgroud)

就像你写的这些非常好的工具的文档是非常糟糕的.我从Chandler Carruth的GoingNative2013谈话中点点滴滴地拼凑起来.

  • 事实上,该命令不起作用: `clang-check -analyze -extra-arg -Xclang -extra-arg -analyzer-output=text [file-path]` `LLVM 错误:无法自动检测编译数据库对于文件 [路径]` `在 [路径] 或任何父目录中找不到编译数据库` `json-compilation-database:打开 JSON 数据库时出错:没有这样的文件或目录` (2认同)