Έκδοση του cppcheck 2.6, ενός αναλυτή στατικού κώδικα για γλώσσες C++ και C

Κυκλοφόρησε μια νέα έκδοση του αναλυτή στατικού κώδικα cppcheck 2.6, η οποία σας επιτρέπει να αναγνωρίζετε διάφορες κατηγορίες σφαλμάτων στον κώδικα στις γλώσσες C και C++, συμπεριλαμβανομένης της χρήσης μη τυπικής σύνταξης, τυπικής για ενσωματωμένα συστήματα. Παρέχεται μια συλλογή προσθηκών μέσω των οποίων το cppcheck ενσωματώνεται με διάφορα συστήματα ανάπτυξης, συνεχούς ενοποίησης και δοκιμών, και παρέχει επίσης δυνατότητες όπως έλεγχος συμμόρφωσης κώδικα με το στυλ κώδικα. Για να αναλύσετε τον κώδικα, μπορείτε να χρησιμοποιήσετε είτε τον δικό σας αναλυτή είτε έναν εξωτερικό αναλυτή από το Clang. Περιλαμβάνει επίσης το σενάριο donate-cpu.py για την παροχή τοπικών πόρων για την εκτέλεση εργασιών συλλογικής αναθεώρησης κώδικα για πακέτα Debian. Ο πηγαίος κώδικας του έργου διανέμεται με την άδεια GPLv3.

Η ανάπτυξη του cppcheck επικεντρώνεται στον εντοπισμό προβλημάτων που σχετίζονται με απροσδιόριστη συμπεριφορά και τη χρήση σχεδίων που είναι επικίνδυνα από την άποψη της ασφάλειας. Ο στόχος είναι επίσης να ελαχιστοποιηθούν τα ψευδώς θετικά. Μεταξύ των προβλημάτων που εντοπίστηκαν: δείκτες σε ανύπαρκτα αντικείμενα, διαιρέσεις με το μηδέν, υπερχείλιση ακεραίων, εσφαλμένες λειτουργίες μετατόπισης bit, λανθασμένες μετατροπές, προβλήματα κατά την εργασία με μνήμη, εσφαλμένη χρήση STL, μηδενικές παραπομπές δείκτη, χρήση ελέγχων μετά την πραγματική πρόσβαση στο buffer, υπερβάσεις buffer, χρήση μη αρχικοποιημένων μεταβλητών.

Στη νέα έκδοση:

  • Οι ακόλουθοι έλεγχοι έχουν προστεθεί στον πυρήνα του αναλυτή:
    • απουσία χειριστή επιστροφής στο σώμα λειτουργίας·
    • καταγράφει αλληλεπικαλυπτόμενα δεδομένα, καθορίζει απροσδιόριστη συμπεριφορά.
    • η τιμή που συγκρίνεται είναι εκτός της αναπαράστασης τιμής του τύπου.
    • Η βελτιστοποίηση αντιγραφής δεν ισχύει για την επιστροφή std::move(local);
    • το αρχείο δεν μπορεί να ανοίξει ταυτόχρονα για ανάγνωση και γραφή σε διαφορετικές ροές (ροή).
  • για πλατφόρμες Unix, προστέθηκε υποστήριξη για την εμφάνιση διαγνωστικών μηνυμάτων σε διαφορετικά χρώματα.
  • προστέθηκε συμβολική ανάλυση για το ValueFlow. Χρησιμοποιεί απλό δέλτα κατά τον υπολογισμό της διαφοράς μεταξύ δύο άγνωστων μεταβλητών.
  • οι κανόνες που χρησιμοποιούνται για τη λίστα των διακριτικών "define" μπορούν επίσης να ταιριάζουν με το #include;
  • ετικέτα βιβλιοθήκης μπορεί τώρα να περιέχει μια ετικέτα , και κατά συνέπεια οι ελεύθερες συναρτήσεις, οι οποίες μπορούν να δεχτούν δοχεία όπως std::size, std::empty, std::begin, std::end κ.λπ. μπορεί να καθορίσει yeld ή action για συνδέσμους.
  • ετικέτα βιβλιοθήκης μπορεί τώρα να περιέχει μια ετικέτα για έξυπνους δείκτες που έχουν μοναδική ιδιοκτησία. Τώρα εκδίδεται μια προειδοποίηση σχετικά με τις κρέμονται αναφορές σε αυτούς τους τύπους έξυπνων δεικτών.
  • Διορθώθηκαν προβλήματα με την επεξεργασία της παραμέτρου —cppcheck-build-dir.
  • Το htmlreport μπορεί πλέον να εμφανίζει πληροφορίες σχετικά με τον συγγραφέα (χρησιμοποιώντας git blame).
  • εκτεταμένες προειδοποιήσεις για μεταβλητές που δεν είναι σταθερές, αλλά θα μπορούσαν να είναι.
  • Τα συσσωρευμένα σφάλματα και ελλείψεις του αναλυτή έχουν διορθωθεί.

Επιπλέον, οι έλεγχοι από το Misra C 2012, συμπεριλαμβανομένης της τροπολογίας 1 και της τροπολογίας 2, έχουν εφαρμοστεί πλήρως, εκτός από τους κανόνες 1.1, 1.2 και 17.3. Οι έλεγχοι 1.1 και 1.2 πρέπει να εκτελούνται από τον μεταγλωττιστή. Η επαλήθευση 17.3 μπορεί να πραγματοποιηθεί από έναν μεταγλωττιστή όπως το GCC.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο