首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Clang静态分析器从命令行输出其工作状态?

如何使Clang静态分析器从命令行输出其工作状态?
EN

Stack Overflow用户
提问于 2014-03-13 07:24:20
回答 3查看 27.2K关注 0票数 22

我在Ubuntu12.10上运行Clang3.4(来自http://llvm.org/apt/)。我在一些代码上运行了分析器(clang - analyzer ),它发现了一些问题:

代码语言:javascript
复制
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 -分析-Xanalyzer '-v'“作为暗处,告诉分析器更详细-Xanalyzer开关来自手册页。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-31 20:35:08

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

代码语言:javascript
复制
clang++ --analyze -Xanalyzer -analyzer-output=text main.cpp

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

代码语言:javascript
复制
clang++ --analyze -Xanalyzer -analyzer-output=html -o html-dir main.cpp

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

代码语言:javascript
复制
-Xanalyzer -analyzer-checker=alpha.cplusplus

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

代码语言:javascript
复制
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 =

例如。

代码语言:javascript
复制
-analyzer-config -analyzer-checker=alpha.cplusplus

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

票数 27
EN

Stack Overflow用户

发布于 2014-03-13 09:14:35

您正处于正确的轨道上,但是要获得导致bug的完整跟踪,您还需要向clang请求文本格式的输出(不要问原因)。由于您可能需要调整,例如,包含路径或为您的项目定义,我建议您使用clang-check,它充当了clang分析器pass的包装器。它还可以连接到例如scan-build中公开的静态分析器工具。然后你就可以

代码语言:javascript
复制
$ clang-check -analyze -extra-arg -Xclang -extra-arg -analyzer-output=text

就像您为这些非常好的工具编写的文档一样,是非常糟糕的。我从Chandler Carruth's GoingNative2013 talk的点点滴滴中拼凑起上面的电话。

票数 7
EN

Stack Overflow用户

发布于 2014-03-13 08:45:55

您必须使用扫描构建:http://clang-analyzer.llvm.org/scan-build.html

输入生成的命令,但使用扫描生成预发送命令。

示例:而不是

代码语言:javascript
复制
make

类型

代码语言:javascript
复制
scan-build make

而不是

代码语言:javascript
复制
./configure
make

类型

代码语言:javascript
复制
scan-build ./configure
scan-build make

在启动分析器之前清除生成,否则make将声明已经构建了所有内容,分析器将不会运行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22371789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档