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 -gile 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
- gdb ve lldb Kullanımı
- AddressSanitizer
- UBSan ve TSan
- Valgrind Temelleri