2017-04-05 5 views
0
#include<stdio.h> 
#include <stdlib.h> 

int test() { 
    const char* s = getenv("CNU"); 
    if (s!=NULL) 
    return 1; 
    else 
    return -1; 
} 

int main() { 
    test(); 
    // some C code.. 
    return 0; 
} 

コマンド:私のプログラムでカバレッジがCHECKED_RETURNで表示されないのはなぜですか?私はコベリティの分析に使用

cov-build --dir Cov.build gcc test.c 
cov-analyze --dir Cov.build --aggressiveness-level high --enable-callgraph-metrics --all 

レポート:CHECKED_RETURNについて

Analysis summary report: 
------------------------ 
Files analyzed     : 1 
Total LoC input to cov-analyze : 10926 
Functions analyzed    : 2 
Paths analyzed     : 6 
Time taken by analysis   : 00:00:01 
Defect occurrences found  : 0 

https://ondemand.coverity.com/reference/7.6.1/en/coverity

答えて

1

CHECKED_RETURNチェッカーが統計的chがありますecker - 戻り値がチェックされているサンプルを探し、統計的に有意な(設定可能な)しきい値に達した場合、戻り値のチェックに失敗した場所に欠陥が発行されます。

あなたは戻り値をチェックするために失敗したときに、それは、必ずしも障害を発行する場合は、あなたがリンクドキュメントの例に示すように、__coverity_always_check_return__()を追加する必要があります。明白な理由のために

int always_check_me(void) { 
    __coverity_always_check_return__(); 
    return rand() % 2; 
} 

int main(int c, char **argv) { 
    always_check_me(); #defect#checked_return 
    // the statement above is a defect because the value is not checked 
    cout << "Hello world" << endl; 
} 

ソースコードをコンパイルするための関数スタブも作成する必要があります(ドキュメントにも記載されています)。コードをCoverity専用にしたい場合は、#if __COVERITY__で保護することができます。

0

はい、CHECKED_RETURNは統計的なチェッカーエラーです。 test()の戻り値を10か所でチェックすると、test()の戻り値をチェックするのを忘れた場合11位になります。これにより、coverityはCHECKED_RETURNエラーを返します。 Ansは、合計使用量からチェックアウトした場所の数を表示します。

関連する問題