2016-07-11 9 views
6

मेरे पास एक बहुत ही सरल। सी फ़ाइल है, जिसमें इसके अंदर कुछ स्पष्ट बग हैं।स्कैन-बिल्ड मेक किसी भी बग का पता नहीं लगाता

#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"); 
} 

मैं त्रुटियों का पता लगाने के लिए क्लैंग के स्थिर कोड विश्लेषक उपकरण (स्कैन-बिल्ड) का उपयोग करने की कोशिश कर रहा हूं। जब मैं उपकरण सीधे फाइलों पर, के रूप में निम्न आदेश का उपयोग कर उदाहरण के लिए चलाएँ:

स्कैन-निर्माण छ ++ -ओ 1 1.c

मैं एक चेतावनी सहित इरादा उत्पादन, मिलता है समारोह में 'पूर्णांक: स्थिर विश्लेषण के लिए' /usr/lib/llvm-3.8/bin/clang '

1.c का उपयोग करना: संकलक कि 0.

स्कैन-निर्माण से विभाजन का उल्लेख से test2 (int) ': 1. सी: 16: 11: चेतावनी: शून्य से विभाजन [-Wdiv-by-zero] वापसी 5/(x-x); ^

1. सी: 16: 11: चेतावनी: शून्य रिटर्न द्वारा डिवीजन 5/(x-x);

~^~~~~~ 1 चेतावनी उत्पन्न हुई। स्कैन-बिल्ड: 1 बग मिला। स्कैन-बिल्ड: बग रिपोर्ट की जांच करने के लिए 'स्कैन-व्यू/tmp/scan-build-2016-07-11-152043-3028-1' चलाएं।

अब, मैं उस आदेश को एक बहुत ही सरल मेकफ़ाइल में डालने की कोशिश कर रहा हूं। मेरी Makefile की सामग्री हैं:

all: 1.c 
    g++ -o 1 1.c 
clean: 
    rm -f *.o 1 

बहरहाल, जब भी मैं, मेकअप के साथ स्कैन-निर्माण के लिए निम्न आदेश का उपयोग कर चलाएँ:

स्कैन-निर्माण

मैं अभी भी कर कंपाइलर से चेतावनी, लेकिन स्कैन-निर्माण उपकरण नहीं !!!

स्कैन-निर्माण: स्थिर विश्लेषण के लिए उपयोग करना '/usr/lib/llvm-3.8/bin/clang'

जी ++ -ओ 1 1.c

1.c: समारोह में ' int test2 (int) ':

1.c: 16: 11: चेतावनी: शून्य से विभाजन [-Wdiv-by-zero] वापसी 5/(xx);

^स्कैन-बिल्ड: निर्देशिका को हटाएं '/ tmp/scan-build-2016-07-11-152326-3055-1' क्योंकि इसमें कोई रिपोर्ट नहीं है। स्कैन-बिल्ड: कोई बग नहीं मिला।

मैंने सी और सी ++ दोनों फ़ाइलों में एक ही व्यवहार देखा है। मैं देखता हूं कि कोई व्यक्ति पिछले (2012) में similar error पर आया था, हालांकि प्रस्तावित उत्तर काम नहीं कर रहा है और ऐसा लगता है कि वैसे भी सी ++ फाइलों को संदर्भित किया जाता है। कोई सुराग?

उत्तर

3

scan-buildCC चर को प्रतिस्थापित करके काम करता है।अपने अपने 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. 
+0

काम करता है और वास्तव में यह है कि समस्या यह है कि मुझे घंटे पिछले कुछ के लिए गुस्सा दिलाना ... धन्यवाद एक बहुत रखा था! – user307976

संबंधित मुद्दे