0Pricing
C++ Academy · Ders

AddressSanitizer

Bellek hatalarını yakalayın

AddressSanitizer, 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.

AddressSanitizer Nedir?

AddressSanitizer (ASan), çalışma zamanında bellek hatalarını algılayan derleyici tabanlı bir araçtır: sınırlar dışı erişim, serbest bırakma sonrası kullanım, iki kez serbest bırakma ve sızıntılar. Günlük sınamalar için yeterince hızlıdır.

ASan'ı Etkinleştirme

Derleme ve bağlama sırasında -fsanitize=address seçeneğini ekleyin; okunabilir raporlar için ayrıca -g kullanın.

g++ -fsanitize=address -g -O1 main.cpp -o app
./app

Öbek Arabelleği Taşması

ASan, ayrılmış bir arabelleğin ötesindeki okuma ve yazmaları bildirir. Bu program bir öğe fazla yazar.

#include <cstdlib>

int main() {
    int* a = (int*)malloc(3 * sizeof(int));
    a[3] = 7; // out of bounds
    free(a);
    return 0;
}

Serbest Bırakma Sonrası Kullanım

Serbest bırakıldıktan sonra belleğe erişmek tanımsız davranıştır; ASan, serbest bırakma ve ayırma yığınlarıyla birlikte öbekte serbest bırakma sonrası kullanım bildirir.

#include <cstdlib>

int main() {
    int* p = (int*)malloc(sizeof(int));
    free(p);
    *p = 5; // use after free
    return 0;
}

Yığın Arabelleği Taşması

ASan ayrıca yığın dizilerini de araçlandırarak yerel arabelleklerin sınırlarının aşılmasını yakalar.

#include <iostream>

int main() {
    int buf[3] = {0, 0, 0};
    for (int i = 0; i <= 3; ++i) buf[i] = i; // i==3 overflows
    std::cout << buf[0] << "\n";
    return 0;
}

Raporu Okuma

Bir ASan raporu hata türünü, hatanın oluştuğu adresi ve hatalı erişimle ilgili ayırma/serbest bırakma işlemlerinin yanı sıra yığın izlerini belirtir. İlk yığın çerçevesi genellikle doğrudan hatayı gösterir.

Sızıntı Algılama

ASan, birçok platformda program sona erdiğinde hiç serbest bırakılmamış belleği ayırma yığınıyla birlikte bildiren LeakSanitizer'ı içerir.

#include <cstdlib>

int main() {
    int* leaked = (int*)malloc(100); // never freed
    return 0;
}

Çalışma Zamanı Seçenekleri

Davranışı ASAN_OPTIONS ortam değişkeniyle ayarlayın; örneğin ASAN_OPTIONS=detect_leaks=1:halt_on_error=0.

Performans Maliyeti

ASan genellikle programları yaklaşık 2 kat yavaşlatır ve bellek kullanımını artırır. Bu, sınamalar ve sürekli tümleştirme için kabul edilebilir; ancak etkinleştirilmiş hâliyle bir sürüm derlemesi yayımlamamalısınız.

Sınamalarla Birleştirme

Birim sınamalarınızı sürekli tümleştirme ortamında ASan altında çalıştırın. Temizleyiciler açıkken gerçekleştirilen sınamalar, birçok gerçek hatayı yalnızca bu şekilde ortaya çıkarır. Özel bir temizleyici derleme yapılandırması bulundurun.

Dikkatin Yerini Tutmaz

ASan yalnızca gerçekten yürüttüğünüz kod yollarındaki hataları bulur. Onu iyi bir sınama kapsamıyla birlikte kullanın; çalıştırılmayan hatalı bir dal gizli kalır.

Hızlı Kontrol

ASan'ın nasıl etkinleştirileceğini hatırlayın.

Özet

AddressSanitizer'ı öğrendiniz.

  • Sınırlar dışı erişimleri, serbest bırakma sonrası kullanımı, iki kez serbest bırakmayı ve sızıntıları algılar
  • -fsanitize=address -g ile etkinleştirilir
  • Raporlar hatayı belirtir ve ayırma/serbest bırakma yığınlarını gösterir
  • Yaklaşık 2 kat daha yavaştır; sınamalar ve sürekli tümleştirme için idealdir, sürümler için değildir

Sıkça Sorulan Sorular

“AddressSanitizer” dersi ücretsiz mi?

Evet — “AddressSanitizer” 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.

“AddressSanitizer” dersinde ne öğreneceğim?

Bellek hatalarını yakalayın 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.

“AddressSanitizer” 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. gdb ve lldb Kullanımı
  2. AddressSanitizer
  3. UBSan ve TSan
  4. Valgrind Temelleri
← C++ Academy Sayfasına Dön