c++ - 如何使 Clang 静态分析器从命令行输出其工作?

标签 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];
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~

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

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

screenshot

这可能是从 Xcode 获得的。

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

(我注意到 GCC 的文档非常好,但 Clang/LLVM 的文档很差。我尝试过“clang --analyze -Xanalyzer '-v'”作为暗中的刺,告诉分析器更详细一点——-Xanalyzer 开关来自手册页。)

最佳答案

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

clang++ --analyze -Xanalyzer -analyzer-output=text main.cpp

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

clang++ --analyze -Xanalyzer -analyzer-output=html -o html-dir main.cpp

此外,您可以选择要启用的特定检查器。 This page列出可用的检查。例如,您可以使用以下标志启用 alpha 组中的所有 C++ 检查:

-Xanalyzer -analyzer-checker=alpha.cplusplus

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'
}
^

显然前端暴露了

-analyzer-config <Option Name>=<Value>

例如

-analyzer-config -analyzer-checker=alpha.cplusplus

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

关于c++ - 如何使 Clang 静态分析器从命令行输出其工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22371789/

相关文章:

c++ - 需要高级低级编程的书籍和网站建议

linux - Teamcity 启动卡在 jetbrains.buildServer.STARTUP

batch-file - FFmpeg : how to burn any kinds of subtitle into videos

c++ - MXE Qt5 应用程序在 Docker 容器中构建失败

c++ - 尝试在重载函数中获取字符和字符串的输入

c++ - 为什么这个循环每次都向 sqdNumber_result 输出 0?

linux - 管理从源代码编译的软件包的最佳方法

linux - 仅显示带有 diff 的已更改行,而不显示新添加的行

php - (Linux CLI PHP) 在执行期间捕获 CURL 的详细输出到文件

windows - 在 Golang 中使用 Exec 时如何隐藏命令提示符窗口?