C’de hata ayıklama ve geliştirme araçları
gdb, Valgrind, sanitizer’lar, strace ve statik analizle C programlarındaki hataları sistemli biçimde bulur, CMake ve testlerle düzenli projeler kurarsın.
Seviye 301 · 21 ders · 21 pratik lab
Dersler
Derleme ve proje araçları
- İleri make: kalıp kuralları ve bağımlılık üretimi
- CMake ile proje kurmak
- Statik ve paylaşımlı kütüphane derlemek
- Derleyici bayrakları: -O, -g, -fsanitize ve sertleştirme
- Kısa görev: kütüphaneyi ve testini CMake ile derle
gdb ile hata ayıklama
- gdb temelleri: kesme noktası, adım, yazdırma
- Yığın izi ve çerçeveler: bt, frame, info locals
- İzleme noktaları: bu değeri kim değiştirdi?
- Çekirdek dökümleri: ulimit ve ölüm sonrası inceleme
- gdb TUI ve komut dosyaları
- Kısa görev: çöken programın nedenini bul
Bellek ve davranış analizi
- Valgrind memcheck çıktısını okumak
- AddressSanitizer ve UndefinedBehaviorSanitizer
- Tanımsız davranış: derleyici kodunu neden sildi?
- strace ve ltrace ile sistem ve kütüphane çağrıları
- Kısa görev: yalnızca -O2 ile ortaya çıkan hata
Statik analiz ve test
- Statik analiz: cppcheck ve clang-tidy
- C’de birim testi: küçük bir test çatısı
- Kapsam ölçmek: gcov ve lcov
- Kısa görev: sıfır uyarı, sıfır analiz bulgusu
Bitirme
- Bitirme görevi: eski bir C aracındaki dört hatayı bul ve belgele
Pratik lablar
- CMake ile kütüphane ve program: Bir yardımcı kütüphane ve onu kullanan programı CMake hedefleri olarak tanımla ve ctest ile testi çalıştır.
- Başlık değişince yeniden derlemek: Başlık dosyası değişince ilgili nesneleri derlemeyen Makefile'a -MMD -MP bağımlılık üretimini ekle.
- Paylaşılan kütüphaneye sürüm adı vermek: Bir kütüphaneyi soname ve sürümle paylaşılan olarak derle, programı rpath ile bağla ve ldd ile doğrula.
- Yanlış ortalamayı gdb ile izlemek: Ortalama hesaplayan programda kesme noktası ve adım adım ilerleme ile hatalı satırı bul ve düzelt.
- Çöken programın geri izini okumak: Segmentation fault veren bir ayrıştırıcıda bt ve frame komutlarıyla NULL işaretçinin nereden geldiğini bul.
- Değişkeni bozanı watchpoint ile bulmak: Bir sayacın değerini beklenmedik anda bozan kodu watchpoint ile yakala ve kök nedeni düzelt.
- Çekirdek dökümünden çökme nedeni çıkarmak: Gece çöken bir işin çekirdek dökümünü gdb ile aç, çökme anındaki değişkenleri incele ve hatayı düzelt.
- Valgrind'in geçersiz okuma raporunu çözmek: Valgrind'in 'Invalid read of size 4' raporundaki satırı bul ve dizinin dışına okumayı düzelt.
- ASan ile heap taşmasını bulmak: Programı -fsanitize=address ile derle, raporu yorumla; bir baytlık heap taşmasını ve yalnızca uzun girdide ortaya çıkan ikinci taşmayı düzelt.
- UBSan ile tanımsız kaydırmayı yakalamak: UBSan'ın raporladığı işaretli taşma ve aşırı kaydırma hatalarını düzelt; testler her iki derlemede geçsin.
- Yalnızca -O2 ile görülen hatayı çözmek: -O0'da çalışıp -O2'de sonsuz döngüye giren kodun tanımsız davranışını bul ve standarda uygun hale getir.
- Tür takma adı hatasını memcpy ile çözmek: float bitlerini işaretçi dönüşümüyle okuyan kodu memcpy ile yeniden yaz ve sonuçların aynı kaldığını göster.
- İlk değeri verilmemiş değişkeni bulmak: Derleme ayarına göre farklı sonuç veren hesaplamada ilk değeri olmayan değişkeni uyarılar ve Valgrind ile bul.
- strace ile kayıp dosyayı bulmak: Sessizce başarısız olan bir aracın hangi dosyayı aradığını strace ile bul ve hata mesajını iyileştir.
- cppcheck bulgularını gidermek: Küçük bir projede cppcheck'in raporladığı kaynak sızıntısı ve sınır hatalarını düzelt ve bulgu sayısını sıfırla.
- Makrolu küçük test düzeneği: ASSERT_EQ makrosu ve test kaydı olan bir test düzeneği yaz; başarısız testler dosya ve satırla raporlansın.
- Kapsanmayan dalları gcov ile bulmak: gcov raporundaki kapsanmamış hata dallarını test ederek satır kapsamını yüzde doksanın üstüne çıkar.
- clang-tidy uyarılarını temizlemek: Seçilmiş clang-tidy denetimleriyle eski bir modülü tara, güvensiz çağrıları ve okunabilirlik sorunlarını düzelt.
- Derleyici analizcisinin bulduğu yolları kapatmak: Programı gcc -fanalyzer ile derle; raporlanan boş işaretçi kullanımı ve sızıntı yollarını adım adım izleyip düzelt ve analiz temiz çıksın.
- Bellek ayırma hatası yollarını sınamak: malloc çağrılarını sayacı olan bir sarmalayıcıyla değiştirip belirli çağrının başarısız olmasını sağla; her hata yolunun sızıntısız döndüğünü testlerle ve kapsam raporuyla göster.
- Programın sistem çağrılarını listelemek: Küçük bir programı strace ile çalıştırıp açtığı dosyaları ve başarısız çağrıları özet tablosundan oku; en çok yinelenen çağrıyı rapor dosyasına yaz.
Kurs hakkında
gdb, Valgrind, sanitizer’lar, strace ve statik analizle C programlarındaki hataları sistemli biçimde bulur, CMake ve testlerle düzenli projeler kurarsın.
Ne öğreneceksin
- Derleme ve proje araçları
- gdb ile hata ayıklama
- Bellek ve davranış analizi
- Statik analiz ve test
- Bitirme
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.