我在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浏览器中查看的工作步骤:
这可能是从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
另外,您可以选择特定的检查器来启用。 此页面列出可用的检查。 例如,您可以使用标志启用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
<选项名称> = <值>
例如
-analyzer-config -analyzer-checker=alpha.cplusplus
这可能比-Xanalyzer
更好的支持,可能会扩展到支持个别跳棋的选项: http : //lists.cs.uiuc.edu/pipermail/cfe-dev/2014-October/039552.html
你是在正确的轨道上,但为了得到完整的跟踪导致一个错误,你还需要请求铛输出的文本格式(不要问为什么)。 因为你可能需要调整,例如包含路径或为你的项目定义无论如何,我建议你使用clang-check
作为围绕铛的分析仪通过包装。 它也可以连接到例如scan-build
暴露的静态分析工具。 那么你可以
$ clang-check -analyze -extra-arg -Xclang -extra-arg -analyzer-output=text
就像你写的这些非常漂亮的工具的文档是糟糕的。 我从Chandler Carruth的GoingNative2013谈话中一点点拼凑起来。
你必须使用scanbuild: http ://clang-analyzer.llvm.org/scan-build.html
你输入生成你的版本的命令,但是你可以用scan-build来预先生成它们。
例如:而不是
make
类型
scan-build make
代替
./configure make
类型
scan-build ./configure scan-build make
在启动分析仪之前清除构建,否则将表明一切已经建立,分析仪将不会运行。