Çeşitli tanımsız davranış türlerinin (özellikle yarış koşullarında) mevcut olmadığından kesinlikle emin olmanın bir yolu yoktur.
Bununla birlikte, bu tür durumları iyi gösteren birçok araç vardır. Düzeltmenizin geçerli olduğunu kanıtlayamasanız bile, şu anda bu tür araçlarla ilgili bir sorun olduğunu kanıtlayabilirsiniz.
Bu amaç için bazı ilginç araçlar:
Valgrind bir hafıza denetleyicisidir. Bellek sızıntılarını bulur, başlatılmamış belleği okur, sivri uçlu işaretçi kullanımı ve sınır dışı erişim.
Helgrind iş parçacığı güvenlik denetleyicisidir. Yarış koşullarını bulur.
Her ikisi de dinamik enstrümantasyonla çalışır, yani programınızı olduğu gibi alır ve sanallaştırılmış bir ortamda çalıştırır. Bu onları müdahalesiz ama yavaş yapar.
UBSan tanımsız bir davranış denetleyicisidir. Tamsayı taşmaları, aralık dışı değişimler ve benzeri şeyler gibi çeşitli C ve C ++ tanımsız davranış durumlarını bulur.
MSan bir hafıza denetleyicisidir. Valgrind ile benzer hedefleri var.
TSan iş parçacığı güvenlik denetleyicisidir. Helgrind ile benzer hedefleri var.
Bu üç Clang derleyicisine yerleştirilmiştir ve derleme zamanında kod üretir. Bu, onları başlangıç sürecinize (özellikle Clang'la derlemeniz gerekir) inşa etme sürecinize entegre etmeniz gerektiği anlamına gelir; bu, başlangıçta * eziyete göre ayarlamalarını çok daha zorlaştırır, ancak diğer yandan, çalışma süreleri çok daha düşüktür.
Listelediğim tüm araçlar Linux üzerinde, bazıları MacOS'ta çalışıyor. Henüz Windows'ta hiçbir çalışmanın güvenilir olmadığını düşünüyorum.