2016-07-11 9 views
6

私は非常に単純な.cファイルを持っていますが、そこには明らかなバグがあります。scan-build makeはバグを検出しません

#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のスタティックコードアナライザツール(スキャンビルド)を使用しようとしています。たとえば、次のコマンドを使用して、私は、ファイル上で直接ツールを実行すると:

スキャン-構築G ++ -o 1 1.C

私は警告を含むことを意図した出力を、入手できますか機能で「INT:静的解析のための「/usr/lib/llvm-3.8/bin/clang」を

1.C使い方:0

スキャン・ビルドによる除算を言及コンパイラからtest2(int) ': 1.c:16:11:warning:ゼロ除算[-Wdiv-by-zero] return 5 /(x-x); ^

1.c:16:11:warning:ゼロ除算5 /(x-x);

〜^ ~~~~~ 1警告が生成されました。スキャンビルド: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 

、私は次のコマンドを使用して、メイクとビルドスキャンを実行するたび:

スキャン-ビルドは

私はまだ取得を作りますコンパイラからの警告ですが、スキャンビルドツールではありません!

スキャン・ビルド: '関数で:静的解析のため

グラム++ -o 1 1.C

1.C 'を/usr/lib/llvm-3.8/bin/clang' を使用int:test2(int) ':

1.c:16:11:警告:ゼロ除算[-Wdiv-by-zero] return 5 /(xx);

^スキャンビルド:レポートが含まれていないため、ディレクトリ '/ tmp/scan-build-2016-07-11-152326-3055-1'を削除しています。 scan-build:バグは見つかりませんでした。

CとC++の両方のファイルで同じ動作が確認されています。私は、誰かがsimilar error(過去)に来ていたことを知っていますが、提案された回答はうまくいかないようで、とにかくC++ファイルだけを参照しているようです。すべての手がかりは?

答えて

3

scan-buildは、変数CCを代用して動作します。あなたのメイクファイルに

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. 
+0

を作品や! – user307976

関連する問題