0Pricing
C++ Academy · Ders

Sanitizer'lar: Address, Thread, UB Sanitizer

Sanitizer ailesiyle bellek, iş parçacığı ve tanımsız davranış hatalarını bulun

Sanitizer'lar: Address, Thread, UB Sanitizer, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Çalışma Zamanı Denetleyicileri

Sanitizer araçları, Clang ve GCC'ye yerleşik, derleme zamanında araçlandırılmış çalışma zamanı denetleyicileridir. Tür sisteminin yakalayamadığı hataları bulurlar.

AddressSanitizer (ASan)

Bellek hatalarını algılar: arabellek taşmaları, serbest bırakılmış belleği kullanma, çift serbest bırakma ve sızıntılar. Yaklaşık 2 kat yavaşlama oluşturur.

g++ -fsanitize=address -g -O1 main.cpp
./a.out

Örnek ASan Çıktısı

ASan bir hata algıladığında, hatanın tam satırını ve türünü içeren bir çağrı yığını izini yazdırır.

==ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 4 at 0x60200000001c
    #0 0x... in main main.cpp:12

ThreadSanitizer (TSan)

Veri yarışlarını ve diğer eşzamanlılık hatalarını algılar. Yaklaşık 5-15 kat yavaşlama oluşturur.

g++ -fsanitize=thread -g main.cpp
./a.out
# Reports concurrent unprotected accesses

Tanımsız Davranış Denetleyicisi (UBSan)

İşaretli tamsayı taşmasını, null işaretçi başvurusunu, hizalanmamış erişimi, sıfıra bölmeyi ve daha fazlasını yakalar.

g++ -fsanitize=undefined -g main.cpp

MemorySanitizer (MSan)

Başlatılmamış bellekten yapılan okumaları algılar. Yalnızca Clang tarafından desteklenir. Tüm programın (kütüphaneler dâhil) MSan altında derlenmesini gerektirir.

LeakSanitizer

Linux'ta ASan ile birlikte sunulur. Çıkış sırasında hâlâ ayrılmış olan belleği raporlar.

ASAN_OPTIONS=detect_leaks=1 ./a.out

Sanitizer'lar Ücretsiz Değildir (NOT)

Tüm sanitizer araçları programları yavaşlatır ve daha fazla bellek kullanır. Bunları geliştirme ve sürekli entegrasyonda kullanın; üretim sürümlerinde kullanmayın.

Hepsi Birleştirilemez

ASan, TSan ve MSan birbirleriyle karşılıklı olarak uyumsuzdur; belleği farklı biçimlerde araçlandırırlar. UBSan diğerleriyle birleştirilebilir.

Derleyici Desteği

GCC, ASan, TSan ve UBSan'ı destekler. Clang, yukarıdakilerin tümünü ve MSan'ı destekler. Seçenekler derleyiciler arasında aynıdır.

Sürekli Entegrasyon Tümleştirmesi

Sürekli entegrasyonda test takımınızı her sanitizer aracı altında çalıştırın. Yarış koşullarını ve bellek hatalarını ürüne göndermeden önce yakalayın. En iyi kapsam için fuzzing ile birleştirin.

İpucu: -O1 ile Derleyin

Sanitizer araçları için derleme yaparken en azından -O1 düzeyinde eniyileştirin. -O0 çalışır; ancak daha az satır içi genişletme yapıldığından çağrı yığını izleri daha az açıklayıcı olur.

Bastırma Dosyaları

Bilinen yanlış pozitifler veya üçüncü taraf sorunları için bir bastırma dosyası yazın ve sanitizer aracına bunları yok saymasını söyleyin.

ASAN_OPTIONS="suppressions=asan.supp" ./a.out

Hızlı Kontrol

İş parçacıkları arasındaki veri yarışlarını hangi sanitizer aracı yakalar?

Özet

Sanitizer araçları gerçek çalışma zamanı hatalarını yakalar: bellek hataları için AddressSanitizer, yarışlar için ThreadSanitizer, tanımsız davranış için UBSan ve başlatılmamış okumalar için MSan. Büyük güvenlik kazanımları için bunları sürekli entegrasyonda test takımınızla birleştirin.

Sıkça Sorulan Sorular

“Sanitizer'lar: Address, Thread, UB Sanitizer” dersi ücretsiz mi?

Evet — “Sanitizer'lar: Address, Thread, UB Sanitizer” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Sanitizer'lar: Address, Thread, UB Sanitizer” dersinde ne öğreneceğim?

Sanitizer ailesiyle bellek, iş parçacığı ve tanımsız davranış hatalarını bulun C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Sanitizer'lar: Address, Thread, UB Sanitizer” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Statik Analiz Araçları: clang-tidy, cppcheck
  2. Sanitizer'lar: Address, Thread, UB Sanitizer
  3. libFuzzer ile Bulanıklaştırma Testi
  4. C++ Projeleri için Sürekli Tümleştirme
← C++ Academy Sayfasına Dön