Sanitizer: Address, Thread, UB Sanitizer
Temukan bug memori, thread, dan perilaku tak terdefinisi dengan keluarga sanitizer
Sanitizer: Address, Thread, UB Sanitizer adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Pemeriksa Saat Berjalan
Pemeriksa sanitasi adalah pemeriksa saat berjalan yang diinstrumentasikan pada waktu kompilasi dan tersedia di Clang serta GCC. Pemeriksa ini menangkap kutu yang tidak dapat ditemukan oleh sistem tipe.
AddressSanitizer (ASan)
Mendeteksi kesalahan memori: luapan penyangga, penggunaan setelah pembebasan, pembebasan ganda, dan kebocoran. Perlambatan sekitar 2 kali lipat.
g++ -fsanitize=address -g -O1 main.cpp
./a.outContoh Keluaran ASan
Saat ASan mendeteksi kutu, alat ini mencetak jejak tumpukan dengan baris yang tepat dan jenis kesalahannya.
==ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 4 at 0x60200000001c
#0 0x... in main main.cpp:12ThreadSanitizer (TSan)
Mendeteksi kondisi balapan data dan masalah konkurensi lainnya. Perlambatan sekitar 5–15 kali lipat.
g++ -fsanitize=thread -g main.cpp
./a.out
# Reports concurrent unprotected accessesUndefined Behavior Sanitizer (UBSan)
Menangkap luapan bilangan bulat bertanda, dereferensi penunjuk null, akses yang tidak selaras, pembagian dengan nol, dan banyak lagi.
g++ -fsanitize=undefined -g main.cppMemorySanitizer (MSan)
Mendeteksi pembacaan memori yang belum diinisialisasi. Khusus Clang. Memerlukan seluruh program, termasuk pustaka, dibangun menggunakan MSan.
LeakSanitizer
Disertakan bersama ASan di Linux. Melaporkan memori yang masih dialokasikan saat program keluar.
ASAN_OPTIONS=detect_leaks=1 ./a.outPemeriksa Sanitasi **NOT** Gratis
Semua pemeriksa sanitasi memperlambat program dan menggunakan lebih banyak memori. Gunakan dalam pengembangan dan CI — bukan dalam rilis produksi.
Tidak Dapat Menggabungkan Semuanya
ASan, TSan, dan MSan saling eksklusif — masing-masing menginstrumentasikan memori dengan cara berbeda. UBSan dapat digabungkan dengan yang lainnya.
Dukungan Kompilator
GCC mendukung ASan, TSan, dan UBSan. Clang mendukung semua yang disebutkan di atas, ditambah MSan. Opsi-opsinya sama pada semua kompilator.
Integrasi CI
Jalankan rangkaian pengujian Anda menggunakan setiap pemeriksa sanitasi dalam CI. Tangkap kondisi perlombaan dan kutu memori sebelum dirilis. Gabungkan dengan pengujian fuzz untuk mendapatkan cakupan terbaik.
Kiat: Bangun dengan -O1
Lakukan optimasi setidaknya pada tingkat -O1 saat membangun untuk pemeriksa sanitasi. -O0 dapat digunakan, tetapi melakukan penyisipan sebaris lebih sedikit sehingga jejak tumpukan kurang informatif.
Berkas Penekanan
Untuk positif palsu yang diketahui atau masalah pihak ketiga, tulis berkas penekanan dan beri tahu pemeriksa sanitasi agar mengabaikannya.
ASAN_OPTIONS="suppressions=asan.supp" ./a.outPemeriksaan Cepat
Pemeriksa sanitasi mana yang menangkap perlombaan data antar-utasan?
Ringkasan
Pemeriksa sanitasi menangkap kutu nyata saat berjalan: AddressSanitizer untuk kesalahan memori, ThreadSanitizer untuk perlombaan, UBSan untuk perilaku tak terdefinisi, dan MSan untuk pembacaan yang belum diinisialisasi. Gabungkan dengan rangkaian pengujian Anda dalam CI untuk meningkatkan keamanan secara signifikan.
Belajar C++ dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Sanitizer: Address, Thread, UB Sanitizer” gratis?
Ya — teks lengkap “Sanitizer: Address, Thread, UB Sanitizer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Sanitizer: Address, Thread, UB Sanitizer”?
Temukan bug memori, thread, dan perilaku tak terdefinisi dengan keluarga sanitizer Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Sanitizer: Address, Thread, UB Sanitizer” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Alat Analisis Statis: clang-tidy, cppcheck
- Sanitizer: Address, Thread, UB Sanitizer
- Fuzzing dengan libFuzzer
- Integrasi Berkelanjutan untuk Proyek C++