簡體   English   中英

scan-build make無法檢測到任何錯誤

[英]scan-build make does not detect any bugs

我有一個非常簡單的.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");
}

我正在嘗試使用clang的靜態代碼分析器工具(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個錯誤。 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

但是,每當我使用make運行scan-build時,請使用以下命令:

掃描構建

我仍然從編譯器收到警告,但是沒有掃描構建工具!

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 /(xx);

^ scan-build:刪除目錄'/ tmp / scan-build-2016-07-11-152326-3055-1',因為它不包含任何報告。 scan-build:未發現錯誤。

我在C和C ++文件中都觀察到了相同的行為。 我看到有人在過去(2012年)遇到類似的錯誤 ,但是建議的答案似乎不起作用,而且無論如何似乎只引用C ++文件。 有什么線索嗎?

scan-build通過替換CC變量來工作。 在您的makefile中使用它

CC=g++
all: 1.c
        $(CC) -o 1 1.c
clean:
        rm -f *.o 1

它有效

scan-build: Using '/usr/bin/clang' for static analysis
/usr/share/clang/scan-build/ccc-analyzer -o 1 1.c
1.c:16:17: warning: Division by zero
        return 5/(x-x); // warn
           ~^~~~~~
1 warning generated.
scan-build: 1 bugs found.
scan-build: Run 'scan-view /tmp/scan-build-2016-07-11-160529-5951-1' to  examine bug reports.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM