C++ ve C dilleri için statik kod analizörü olan cppcheck 2.6'nin sürümü

Statik kod analizörü cppcheck 2.6'nın yeni bir sürümü yayımlandı; bu sürüm, gömülü sistemler için tipik olan standart dışı sözdizimi kullanıldığında da dahil olmak üzere, C ve C++ dillerindeki koddaki çeşitli hata sınıflarını tanımlamanıza olanak tanır. cppcheck'in çeşitli geliştirme, sürekli entegrasyon ve test sistemleriyle entegre edildiği ve ayrıca kod stiline uygunluğunu kontrol etme gibi özellikler sağlayan bir eklenti koleksiyonu sağlanmaktadır. Kodu ayrıştırmak için kendi ayrıştırıcınızı veya Clang'ın harici bir ayrıştırıcısını kullanabilirsiniz. Ayrıca, Debian paketleri için işbirliğine dayalı kod inceleme çalışmaları yapmak amacıyla yerel kaynaklar sağlamak üzere donate-cpu.py betiğini de içerir. Projenin kaynak kodu GPLv3 lisansı altında dağıtılmaktadır.

Cppcheck'in geliştirilmesi, tanımlanmamış davranışlarla ve güvenlik açısından tehlikeli olan tasarımların kullanımıyla ilişkili sorunların belirlenmesine odaklanmıştır. Amaç aynı zamanda yanlış pozitifleri en aza indirmektir. Tanımlanan sorunlar arasında: var olmayan nesnelere işaretçiler, sıfıra bölmeler, tamsayı taşmaları, yanlış bit kaydırma işlemleri, hatalı dönüşümler, bellekle çalışırken sorunlar, yanlış STL kullanımı, boş işaretçi referansları, gerçek erişimden sonra kontrollerin kullanılması arabelleğe alma, arabellek taşmaları, başlatılmamış değişkenlerin kullanımı.

Yeni sürümde:

  • Analizör çekirdeğine aşağıdaki kontroller eklendi:
    • işlev gövdesinde bir dönüş operatörünün bulunmaması;
    • örtüşen verilerin kaydedilmesi, tanımlanmamış davranışın tanımlanması;
    • karşılaştırılan değer türün değer temsilinin dışındadır;
    • kopya optimizasyonu std::move(local); işlevini döndürmek için geçerli değildir;
    • dosya farklı akışlarda (akış) okuma ve yazma için aynı anda açılamaz;
  • Unix platformları için tanılama mesajlarının farklı renklerde görüntülenmesine yönelik destek eklendi;
  • ValueFlow için sembolik analiz eklendi. İki bilinmeyen değişken arasındaki farkı hesaplarken basit deltayı kullanır;
  • "define" belirteçleri listesi için kullanılan kurallar aynı zamanda #include ile de eşleşebilir;
  • kütüphane etiketi artık bir etiket içerebilir ve buna bağlı olarak std::size, std::empty, std::begin, std::end vb. gibi kapsayıcıları kabul edebilen ücretsiz işlevler. bağlayıcılar için sarım veya eylemi belirtebilir;
  • kütüphane etiketi artık bir etiket içerebilir benzersiz sahipliğe sahip akıllı işaretçiler için. Artık bu tür akıllı işaretçilere yapılan sarkan referanslar hakkında bir uyarı yayınlanıyor;
  • —cppcheck-build-dir parametresinin işlenmesiyle ilgili sorunlar düzeltildi;
  • htmlreport artık yazar hakkındaki bilgileri görüntüleyebilir (git suçlamasını kullanarak);
  • sabit olmayan ancak sabit olabilecek değişkenler hakkında genişletilmiş uyarılar;
  • Analizörün birikmiş hataları ve eksiklikleri düzeltildi.

Ek olarak, Değişiklik 2012 ve Değişiklik 1 dahil olmak üzere Misra C 2'deki kontroller, kural 1.1, 1.2 ve 17.3 hariç tamamen uygulanmıştır. 1.1 ve 1.2 numaralı kontroller derleyici tarafından gerçekleştirilmelidir. Doğrulama 17.3, GCC gibi bir derleyici tarafından gerçekleştirilebilir.

Kaynak: opennet.ru

Yorum ekle