相关疑难解决方法(0)

如何让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开关来自手册页.)

c++ linux command-line clang clang-static-analyzer

15
推荐指数
2
解决办法
2万
查看次数

cmake clang-tidy(或其他脚本)作为自定义目标

我正在尝试为clang-tidy创建一个自定义cmake目标,以便对我的项目进行lint.源文件夹看起来像这样:

src/scripts/run-clang-tidy.py
src/.clang-tidy
src/...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的计划是使用自定义命令将这两个文件复制到构建目录:

add_custom_command(
    OUTPUT run-clang-tidy.py .clang-tidy
    COMMAND cp ${CMAKE_SOURCE_DIR}/scripts/run-clang-tidy.py ${CMAKE_SOURCE_DIR}/.clang-tidy ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

我现在想要run-clang-tidy.py在构建目录(应该是工作目录)中调用自定义目标,以便我可以调用:

make lint
Run Code Online (Sandbox Code Playgroud)

哪个应该运行指定的检查.clang-tidy.

要使此脚本起作用,它还需要该CMAKE_EXPORT_COMPILE_COMMANDS选项.我尝试使用以下命令设置它,但它无法识别它:

add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
Run Code Online (Sandbox Code Playgroud)

电话add_custom_target怎么样?

lint cmake clang target clang-tidy

13
推荐指数
3
解决办法
9402
查看次数

scan-build make不会检测到任何错误

我有一个非常简单的.c文件,里面有一些明显的错误.

#include <stdio.h>

struct S {
  int x;
};

void f(struct S s){
}

void test() {
  struct S s;
  f(s); // warn
}

int test2(int x){
  return 5/(x-x); // warn
}

int main(){
  test();
  test2(532);
  printf("Hej\r\r");
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用clang的静态代码分析工具(scan-build)来检测错误.当我直接在文件上运行该工具时,例如使用以下命令:

scan-build g ++ -o 1 1.c.

我确实获得了预期的输出,包括来自编译器的警告,该警告提到除以0.

scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析

1.c:在函数'int test2(int)'中:1.c:16:11:警告:除零[-Wdiv-by-zero]返回5 /(xx); ^

1.c:16:11:警告:除零返回5 /(xx);

〜^ ~~~~~生成1个警告.scan-build:找到1个bug.scan-build:运行'scan-view/tmp/scan-build-2016-07-11-152043-3028-1'来检查错误报告.

现在,我试图将该命令放入一个非常简单的Makefile中.我的Makefile的内容是:

all: 1.c
    g++ -o 1 1.c
clean:
    rm -f *.o 1
Run Code Online (Sandbox Code Playgroud)

但是,每当我使用make运行scan-build时,使用以下命令:

scan-build make

我仍然收到编译器的警告,但不是扫描构建工具!

scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析

g ++ -o 1 1.c.

1.c:在函数'int test2(int)'中:

1.c:16:11:警告:除零[-Wdiv-by-zero]返回5 …

c static-analysis makefile clang scan-build

8
推荐指数
1
解决办法
3465
查看次数

Clang Static Analyzer找不到最基本的问题

我想尝试一下clang静态分析仪.我在Windows上并使用Visual Studio构建了clang.它似乎工作,但同时它似乎是非常无用的.

我做了一个示例文件

example.c

int main(void) 
{
    int h = 0;
    return 1/h;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

example.c

int main(void) 
{
    int h;
    return 1/h;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

example.c

int main(void) 
{
    return 1/0;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

如果找不到这些最基本的错误(并且可以通过clang本身找到它们),静态分析仪如何才能使用?

gcc如果重要的话,我是MinGW.我也试过替代,clang但没有发生任何事情.

我在这里做错了吗?

c static-analysis llvm clang clang-static-analyzer

7
推荐指数
1
解决办法
1495
查看次数

如何在 Windows 上将 clang 静态分析器与 msbuild 结合使用?

clang 的二进制 Windows 安装程序包含 scan-build,但是当您使用 msbuild 运行它时,什么也没有发生。即使我做了类似的事情:

"C:\Program Files\LLVM\bin\scan-build.bat" "C:\Program Files\LLVM\bin\clang.exe" test.cpp
Run Code Online (Sandbox Code Playgroud)

我得到类似的东西:

scan-build: Using 'C:\Program Files\LLVM\bin\clang.exe' for static analysis
scan-build: Removed Directory '....'
scan-build: No Bugs found
Run Code Online (Sandbox Code Playgroud)

其中test.cpp是:

void DivideByZero(int z){
    if (z == 0) {
        int x = 1 / z;
    }
}

int main() {
    int *i = nullptr;
    *i = 42;
    DivideByZero(0);       
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下内容,我会收到一些警告:

"C:\Program Files\LLVM\bin\clang.exe" --analyze test.cpp
Run Code Online (Sandbox Code Playgroud)

回到我的问题。如何让它与 MSBUild 一起工作?scan-build 实际上在做什么,我应该使用它还是 --analyze?有什么不同?

windows msbuild static-analysis clang clang-static-analyzer

5
推荐指数
0
解决办法
748
查看次数