Tidak ada cara untuk benar-benar memastikan berbagai jenis perilaku yang tidak terdefinisi (dalam kondisi ras tertentu) tidak ada.
Namun, ada sejumlah alat yang menunjukkan sejumlah situasi seperti itu. Anda mungkin dapat membuktikan bahwa ada masalah saat ini dengan alat tersebut, meskipun Anda tidak dapat membuktikan bahwa perbaikan Anda valid.
Beberapa alat menarik untuk tujuan ini:
Valgrind adalah pemeriksa memori. Ia menemukan kebocoran memori, pembacaan memori yang tidak diinisialisasi, penggunaan pointer menggantung dan akses di luar batas.
Helgrind adalah pemeriksa keamanan utas. Ia menemukan kondisi balapan.
Keduanya bekerja dengan instrumentasi dinamis, yaitu mereka mengambil program Anda apa adanya dan menjalankannya dalam lingkungan yang tervirtualisasi. Ini membuat mereka tidak mengganggu, tetapi lambat.
UBSan adalah pemeriksa perilaku yang tidak ditentukan. Ia menemukan berbagai kasus perilaku tidak terdefinisi C dan C ++, seperti integer overflows, out-of-range shift dan hal-hal serupa.
MSan adalah pemeriksa memori. Ini memiliki tujuan yang sama dengan Valgrind.
TSan adalah pemeriksa keamanan utas. Ini memiliki tujuan yang sama dengan Helgrind.
Ketiganya dibangun ke dalam kompiler Dentang dan menghasilkan kode pada waktu kompilasi. Ini berarti bahwa Anda perlu mengintegrasikan mereka ke dalam proses build Anda (khususnya, Anda harus mengkompilasi dengan Dentang), yang membuat mereka jauh lebih sulit untuk diatur daripada * grind, tetapi di sisi lain mereka memiliki overhead runtime yang jauh lebih rendah.
Semua alat yang saya daftarkan berfungsi di Linux dan beberapa di MacOS. Saya belum berpikir ada pekerjaan di Windows andal.