क्या खुला स्रोत C ++ स्थैतिक विश्लेषण उपकरण उपलब्ध हैं? [बन्द है]


301

जावा में कुछ बहुत अच्छे ओपन सोर्स स्टैटिक एनालिसिस टूल जैसे फाइंडबग्स , चेकस्टाइल और पीएमडी हैं । उन उपकरणों का उपयोग करना आसान है, बहुत उपयोगी है, कई ऑपरेटिंग सिस्टम और मुफ्त पर चलते हैं

वाणिज्यिक C ++ स्थैतिक विश्लेषण उत्पाद उपलब्ध हैं। हालांकि इस तरह के उत्पाद शानदार हैं, छात्रों के लिए लागत बहुत अधिक है और आमतौर पर परीक्षण संस्करण प्राप्त करना कठिन है।

विकल्प खुला स्रोत सी ++ स्थिर विश्लेषण उपकरण खोजने के लिए है जो कई प्लेटफार्मों (विंडोज और यूनिक्स) पर चलेगा। एक खुला स्रोत उपकरण का उपयोग करके, इसे कुछ आवश्यकताओं को फिट करने के लिए संशोधित किया जा सकता है। उपकरण ढूंढना आसान काम नहीं रहा है।

नीचे C ++ स्टैटिक विश्लेषण टूल की एक छोटी सूची है जो दूसरों के द्वारा पाया या सुझाया गया है।

  • C ++ चेक http://sf.net/projects/cppcheck/
  • Oink http://danielwilkerson.com/oink/index.html
  • C और C ++ कोड काउंटर http://sourceforge.net/projects/cccc/
  • स्प्लिंट (उत्तरों से)
  • मोज़िला का पोर्क (उत्तर से) (यह अब ओंक का हिस्सा है)
  • मोज़िला का डीहाइड्रा (उत्तरों से)
  • -Weffc++GNU g ++ के लिए विकल्प का उपयोग करें (उत्तर से)

कुछ अन्य पोर्टेबल ओपन सोर्स C ++ स्टैटिक विश्लेषण टूल क्या हैं, जिनके बारे में किसी को भी पता है और इसकी सिफारिश की जा सकती है?

कुछ संबंधित लिंक


वाणिज्यिक, डीएमएस सॉफ्टवेयर रेन्गिनियरिंग टूलकी, जावा, सी, सी ++ और कोबोल को संभालती है, पार्सिंग, एएसटी बिल्डिंग, नाम / प्रकार रिसोलिशन, नियंत्रण / डेटा प्रवाह विश्लेषण, कस्टम विश्लेषण और परिवर्तन प्रदान करती है। Semanticdesigns.com/Products/DMS/DMSToolkit.html देखें ।
इरा बैक्सटर

1
कमर्शियल टूल के लिए CppDepend ( cppd depend.com ) भी है, और शायद ट्रायल वर्जन छात्रों के लिए पर्याप्त हो सकता है।

जवाबों:


21

ओंक एक उपकरण है जो एल्सा सी ++ के सामने के छोर पर बनाया गया है। मोज़िला का पोर्क एल्सा / ओंक का एक कांटा है।

देखें: http://danielwilkerson.com/oink/index.html


1
मैंने अपने जीवन में 1000+ कार्यक्रम संकलित किए हैं, लेकिन भगवान के प्रेम के लिए मैं इस पैकेज को संकलित नहीं कर सकता, चाहे जो भी हो। मैंने Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows का उपयोग करने की कोशिश की - लेकिन नहीं। कुछ हमेशा गायब रहता है और प्रलेखन सिर्फ सादा है। मुझे गलत मत समझो, मुझे लगता है कि उपकरण शानदार है। लेकिन वेबसाइट और डॉक्यूमेंटेशन ऐसा लगता है कि 10-15 सालों में किसी ने उन्हें छुआ तक नहीं।
अपाचे

73

CppCheck खुला स्रोत और क्रॉस-प्लेटफ़ॉर्म है।

मैक ओएस एक्स:

brew install cppcheck

1
@ सर्जियो ने व्यक्तिगत रूप से कोई मुद्दा नहीं देखा है। मेरा मानना ​​है कि CppCheck में कुछ रास्तों या फाइलों को अनदेखा करने या बाहर निकालने की क्षमता है, जो दायरे को कम करने में मदद करती है।
सू वेई टैन

1
विंडोज पर:choco install cppcheck
KindDragon

53

जीएनयू संकलक के संबंध में, जीसीसी के पास पहले से ही एक बिलिन विकल्प है जो उन लोगों के लिए अतिरिक्त चेतावनी को सक्षम करता है। विकल्प है- वेबफेक ++ और यह स्कॉट मेयर्स के कुछ दिशानिर्देशों के उल्लंघन के बारे में है जो उनकी पुस्तकों " प्रभावी और अधिक प्रभावी सी ++ " में प्रकाशित हैं ।

विशेष रूप से विकल्प निम्नलिखित वस्तुओं का पता लगाता है:

  • डायनामिक रूप से आवंटित मेमोरी वाले वर्गों के लिए एक कॉपी कंस्ट्रक्टर और एक असाइनमेंट ऑपरेटर को परिभाषित करें।
  • रचनाकारों में असाइनमेंट को प्रारंभिक वरीयता दें।
  • बेस कक्षाओं में विध्वंसक वर्चुअल करें।
  • "ऑपरेटर =" का संदर्भ लें * इसे।
  • जब आप किसी ऑब्जेक्ट को वापस करना चाहते हैं, तो संदर्भ को वापस करने का प्रयास न करें।
  • वेतन वृद्धि और वेतन वृद्धि ऑपरेटरों के उपसर्ग और उपसर्ग रूपों के बीच भेद।
  • कभी भी ओवरलोड न करें "&&", "||", या ","।

7
Gcc -Wall और -Weffc ++ के अलावा, -Wextra कुछ अच्छे मुक्त स्थैतिक विश्लेषण करता है, उदाहरण के लिए, ऐसी शाखाएँ जो मान वापस नहीं करती हैं, या शून्य से कम होने के लिए अहस्ताक्षरित की जाँच नहीं करती हैं। यह उल्लेखनीय है कि पेशेवर प्रोग्रामर कितनी बार सोचते हैं कि बाद वाला एक अच्छा विचार है ...
फ्लैश शेरिडन

24
युक, एक बड़े कोडबेस में पूरी तरह से ठीक होने वाले निर्माण के टन के -Weffc++बारे में चेतावनी देता है । मैं हालांकि, का सुझाव दूसरा ; इसके बिना घर मत छोड़ो! -Wextra
टॉम

29

अभी के लिए विकास के तहत, लेकिन क्लैंग सी विश्लेषण करता है और समय के साथ सी ++ को संभालने के लिए लक्षित होता है। यह LLVM प्रोजेक्ट का हिस्सा है ।

अद्यतन : जबकि लैंडिंग पृष्ठ कहता है "विश्लेषक एक निरंतर कार्य-प्रगति है", यह अभी भी C और C ++ दोनों के लिए एक स्थिर विश्लेषक के रूप में प्रलेखित है।

प्रश्न: मैं स्थैतिक विश्लेषण के लिए जीसीसी / क्लैंग कैसे चला सकता हूं? (केवल चेतावनी)

कंपाइलर ऑप्शन: -fsyntax-only


1
एलएलवीएम एक बहुत ही दिलचस्प परियोजना है जो कि जीसीसी की तुलना में कम समय में मो रि-अनुकूलित बायनेरिज़ बनाती है; और क्लैंग, जब पूरा हो जाएगा, तो इसका फ्रंट-एंड होगा ...
निकोला बोनेली

एक अन्य संपादक ने -fsyntax-only स्विच पर जानकारी जोड़ी। बस ध्यान दें कि यह अनिवार्य रूप से विश्लेषण चलाने के लिए एक अनुरोध है कि संकलक वास्तव में संकलन के बिना चलेगा, और चेतावनी का उत्सर्जन करेगा। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि यह स्थैतिक विश्लेषण से अलग है।
डॉन वेकफील्ड

17

किसी और ने उल्लेख किया-वेबफेक ++, लेकिन यह वास्तव में केवल जीसीसी चेतावनी में से एक है जिसे मैं डिफ़ॉल्ट रूप से चालू नहीं करता हूं। हालाँकि, चेतावनी का सेट जो मैं चालू करता हूं, वह मेरी किट में सबसे महत्वपूर्ण स्थैतिक विश्लेषण उपकरण है। आप अनुशंसित चेतावनियों की पूरी सूची देख सकते हैं ।

संक्षेप में:

-वैकल्पिक -वेल्टा -वैक्रा-एलायंस -वॉक-क्वॉल -Wctor-dtor-गोपनीयता -Wdisabled-ऑप्टिमाइज़ेशन -वर्टैट = 2 -Winit-self -Wlogical-op -Wmissing-घोष्ाण-शामिल करना-शामिल करना-dirs -Wnoexcept -Wold -स्टाइल-कास्ट -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-कनवर्ज़न -Wignign-promo -Wstrict-null-sentinel -Wstrict-overflow 5 -Wswitch-default -Wundef -Wundor -Werror -Wused-unused

ध्यान दें कि इनमें से कुछ को जीसीसी के एक नए संस्करण की आवश्यकता होती है, इसलिए यदि आप 4.5 या कुछ पर वापस फंस गए हैं, तो आपको उन्हें अपनी सूची से समाप्त करने की आवश्यकता हो सकती है।


14

जॉन कार्मैक ने "स्टैटिक कोड एनालिसिस" पर इस दिलचस्प ब्लॉग पोस्ट में पीवीएस-स्टूडियो का भी उल्लेख किया है ।


4
यह न तो "खुला स्रोत" है और उस शब्द के किसी भी प्रकार के अर्थ में बिल्कुल "सकारात्मक" नहीं है। यह अच्छी तरह से जाना जाता है स्थैतिक विश्लेषण उपकरण (केवल मुझे लगता है कि कवर करने के लिए दूसरा), लेकिन यह pricetag काफी अधिक है।
टॉमस प्रूजिना

7

यदि ओपन सोर्स द्वारा, आप वास्तव में "मुक्त" थे, तो Microsoft का पूर्व- विश्लेषण एक अच्छा है। Windows- केवल टोकरा। यह विजुअल स्टूडियो और कंपाइलर में पूरी तरह से एकीकृत है। उदाहरण के लिए:

cl /analyze Sample.cpp

यह किस संस्करण और संस्करण में उपलब्ध है?
टॉक

संकलक में बनाया जाना लगता है, जो मुफ़्त है। एकीकरण केवल टीम संस्करण है।
JBRWilkinson


4

स्प्लिंट सी के लिए बिल भरने लगता है।

यदि आप खुले स्रोत को निर्दिष्ट नहीं करते हैं तो मैं कहूंगा कि जिम्पेल सॉफ्टवेयर का PCLint शायद C ++ में स्थिर कोड जाँच के लिए उपलब्ध सर्वोत्तम उपकरणों में से एक है। लेकिन, ज़ाहिर है, यह खुला स्रोत नहीं है।

मैक ओएस एक्स:

brew install splint

2
लेकिन एक एकल डेवलपर के लिए महंगा :) मुझे मुफ्त बेहतर पसंद है
रॉबर्ट गोल्ड

6
स्प्लिंट C के लिए है, C ++ के लिए नहीं। मुझे नहीं पता कि वे कवरेज का विस्तार करने की योजना बना रहे हैं या नहीं। उम्मीद है!
हेरोल्ड बेमफोर्ड

हां, एक कोशिश के लायक है, यह यूनिक्स में काउंटर-पार्ट है जिसे फ्लेक्स-लिंट कहा जाता है, 9.0 संस्करण को तेज होना चाहिए 8.x संस्करण, 9.0 संस्करण विश्लेषण को गति देने के लिए पूर्व संकलित हेडर का भी समर्थन करता है। पीसी-लिंट को वश में करने के लिए आपको समय लगता है, इसमें झूठे-सकारात्मक होते हैं जो आपको परेशानी में डाल सकते हैं यदि आप इसे चुनिंदा रूप से अनदेखा नहीं कर सकते हैं।
झाउरुफ़ेई

3

Microsoft का PREFast विंडोज ड्राइवर किट में भी उपलब्ध है। संस्करण 7.0 यहां डाउनलोड करने योग्य है

Microsoft डॉक्स बताता है कि इसे केवल ड्राइवर कोड के खिलाफ चलाया जाना चाहिए लेकिन यह (पुराना) ब्लॉग पोस्ट इसे चलाने के लिए चरणों का पालन करता है। शायद इसे एक सामान्य बिल्ड प्रक्रिया में एकीकृत किया जा सकता है?


PREFast आपकी निर्माण प्रक्रिया को बहुत धीमा कर देगा, किसी भी वास्तविक परियोजना के लिए, आपका बिल्ड सर्वर शायद इसे बर्दाश्त नहीं कर सकता है।
zhaorufei

@ ज़हरौफ़ी: अधिकांश स्थिर विश्लेषण "तेज़" नहीं हैं; परिभाषा के अनुसार उनके पास एक बहुत ही जटिल कोड विश्लेषण कार्य है। यदि आपको हर समय बिल्ड लागत पसंद नहीं है, तो बस इसे वैकल्पिक बनाएं।
ईरा बाक्सटर

2

हम मेट्रिकुलेटर नामक एक ग्रहण सीडीटी प्लग-इन पर काम कर रहे हैं। इसका अभी भी विकास चल रहा है, लेकिन कुछ प्रमुख मेट्रिक्स (जैसे एलएसएलओसी, मैककेबे, एफेरेंटकौपलिंग) पहले से ही लागू हैं।

वीडियो प्रदर्शन और प्रलेखन जैसे अधिक विवरणों के लिए http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation देखें ।

नवीनतम रात का निर्माण अद्यतन साइट के माध्यम से स्थापना के लिए उपलब्ध है: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

आगे का वर्णन

मेट्रिक्यूलेटर सांख्यिकीय रूप से C ++ स्रोत कोड का विश्लेषण करता है और सॉफ्टवेयर मैट्रिक्स उत्पन्न करता है। मेट्रिक्स को कोडन चेकर्स के रूप में लागू किया जाता है। विश्लेषण के परिणामों को एक अलग दृश्य में खोजा जा सकता है। प्रत्येक मीट्रिक में विन्यास योग्य गुण होते हैं (जैसे 'फ़ंक्शन प्रति कोड की अधिकतम पंक्तियों के लिए एक सीमा')। इन थ्रेसहोल्ड से अधिक एक समस्या की रिपोर्ट करेगा और स्रोत कोड संपादक में एक मार्कर बनाएगा।

आप कर सकते हैं मीट्रिक के साथ:

  • C ++ फ़ाइलों / फ़ोल्डरों / परियोजनाओं का विश्लेषण करें
  • मीट्रिक थ्रेसहोल्ड को परिभाषित करें और कोडन्स वरीयता पृष्ठ का उपयोग करके मीट्रिक को सक्षम / अक्षम करें
  • स्रोत कोड संपादकों में समस्या मार्कर हैं
  • मीट्रिक परिणाम देखें
  • टैग क्लाउड के रूप में मीट्रिक परिणाम निर्यात करें (अपडेट साइट के माध्यम से वैकल्पिक सुविधा के रूप में उपलब्ध)

वर्तमान में मेट्रिक्युलेटर निम्नलिखित मैट्रिक्स के साथ आता है:

  • मैककेबे (साइक्लोमैटिक जटिलता)
  • प्रति प्रकार EfferentCoupling
  • कोड की तार्किक स्रोत लाइनें
  • प्रति प्रकार सदस्यों की संख्या
  • प्रति फ़ंक्शन पैरामीटर की संख्या

1

आपको oo- ब्राउज़र की कोशिश करनी चाहिए, इसमें xemacs के साथ कमाल का एकीकरण है


1

MELT में GCC के कोड एक्सटेंशन भी हो सकते हैं (कुछ विशिष्ट विश्लेषण करने के लिए C (बहुत कठिन) में GCC प्लगइन्स के लिए डिज़ाइन किया गया एक डोमेन विशिष्ट भाषा) या GCC प्लगइन्स।


2
एमईएलटी के बारे में पीडीएफ में से एक को पढ़ा है और जीसीटी को पिघलाने के साथ, मेरी भावना यह है कि यह अभी भी जटिल है / है अपने स्वयं के प्लगइन्स को जोड़ने के लिए भिन्न। आम उपयोगकर्ता के लिए व्यावहारिक तरीका नहीं है।
झाउरुफ़ेई

1
जीसीसी का विस्तार जटिल है, जो भी आप इसे करते हैं (सी प्लगिन के माध्यम से, एमईएलटी के माध्यम से या यहां तक ​​कि पायथन के माध्यम से)। ऐसा इसलिए है क्योंकि जीसीसी जटिल है। और किसी भी C ++ स्टैटिस्टिकल एनालिसिस टूल को कस्टमाइज़ करना कठिन है क्योंकि C ++ लैंग्वेज स्पेसिफिकेशन बहुत ही कॉम्प्लेक्स है, और आपको उस कॉम्प्लेक्सिटी (किसी भी नॉन-ट्रिवियल C ++ प्रोग्राम को बहुत सी C ++ सुविधाओं का उपयोग करने की आवश्यकता होगी, शायद C ++ स्टैण्डर्ड लाइब्रेरी के माध्यम से उपयोग करना होगा) ।
बेसिल स्टारीनेविच

0

Doxygen कुछ नियंत्रण प्रवाह विश्लेषण करता है और रेखांकन उत्पन्न करता है। वे नहीं हो सकते हैं जो आप देख रहे हैं, लेकिन मैंने उन्हें देखने के लिए उपयोगी माना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.