HN'de Paylaşıldı: 17 yaşındaki bir genç, 6 ayını C hata ayıklayıcısı geliştirmeye adadı
(github.com/d4ckard)Spray hata ayıklayıcısına giriş
- Spray, C kodu için basit ve anlaşılması kolay bir hata ayıklayıcıdır.
- Çalışan programın yürütülmesini kontrol etme, durumu inceleme ve değiştirme işlevleri sunar.
- Hata ayıklayıcıların iç işleyişine duyulan merak ve hata ayıklamayı daha erişilebilir hâle getirmenin yollarını araştırma amacıyla geliştirilmeye başlandı.
Başlıca özellikler
- Fonksiyonlar, dosya içindeki satırlar ve adresler için kesme noktaları ayarlama.
- Değişkenlerin, bellek adreslerinin ve register'ların değerlerini yazdırma ve ayarlama.
- C sözdizimi vurgulama, backtrace ve adım adım yürütme.
- Komut çıktısı biçimini belirleyen filtre özelliği.
Geliştirme yol haritası
- Karmaşık struct'ların yazdırılması ve değiştirilmesi.
- Karmaşık struct'lar için sözdizimi vurgulama.
- Frame pointer yerine DWARF tabanlı backtrace.
- Inline fonksiyonlar, harici kütüphane yükleme ve hata ayıklanan programa gönderilen sinyalleri yakalama.
Kurulum
- Spray frontend'inin bir kısmı Scheme ile yazılmıştır ve CHICKEN Scheme aracılığıyla C'ye derlenir.
- CHICKEN kurulumu gerekir; ayrıca libdwarf bağımlılığı bulunduğundan önce onun kurulması gerekir.
- Depoyu klonlayıp
makekomutuyla Spray'i kurun. $PATH'e ekleyerek normal bir komut gibi kullanabilirsiniz.
Spray kullanımı
- Hata ayıklanacak binary'de debug bilgisinin etkin olması ve optimizasyonların kapatılmış olması gerekir.
- Program Clang kullanılarak derlenmelidir.
- İlk argüman olarak hata ayıklanacak binary'nin adını, sonraki argümanlar olarak da hata ayıklanacak programın argümanlarını verin.
Komutlar
Değer okuma ve yazma
- Değişkenlerin, register'ların ve adreslerin değerlerini yazdırın veya ayarlayın.
- Register adları AT&T assembly sözdizimine göre
%öneki kullanır. - Değerler ondalık veya hexadecimal olarak belirtilebilir.
Kesme noktaları
- Fonksiyonlar, dosya içindeki satırlar ve adresler için kesme noktaları ayarlayın ve silin.
continuekomutuyla bir sonraki kesme noktasına kadar yürütmeye devam edin.
Adım adım yürütme
- Sonraki satıra geçin, fonksiyonun içine girin veya mevcut fonksiyondan çıkın.
- Sonraki komuta ilerleyin, mevcut konumdan backtrace yazdırın.
Filtreler
- Çıktı biçimini değiştiren filtreler kullanılabilir.
- Çıktı biçimini değiştirmek için
printvesetkomutlarından sonra filtre ekleyin.
Katkıda bulunma
- Tüm katkılar memnuniyetle karşılanır; bir pull request göndermeden önce yerel test paketini çalıştırarak işlevlerin bozulmadığını doğrulayın.
- Belirli değerlerdeki off-by-one hatası nedeniyle oluşan test başarısızlıkları göz ardı edilebilir.
Kaynaklar
- Sy Brand'in "Writing a Linux Debugger" blog serisi, DWARF 5 standardı, libdwarf belgeleri ve Eli Bendersky'nin "How debuggers work" yazısı.
GN⁺ görüşü
Bu yazıdaki en önemli nokta, Spray'in C kodu için kullanıcı dostu bir hata ayıklayıcı olması ve hata ayıklamayı daha erişilebilir kılmaya odaklanmasıdır. Yeni başlayan yazılım mühendislerinin de anlayabileceği bir yapı ve komutlar sunarak karmaşık hata ayıklama işlerini daha kolay hâle getirmesi dikkat çekicidir. Ayrıca geliştirme yol haritası ve katkı yöntemleri açık biçimde sunulduğu için, açık kaynak projelere katılmak isteyen geliştiriciler için ilgi çekici bir fırsat sunuyor.
1 yorum
Hacker News görüşleri
Genç programcının kodu özellikle temiz, tutarlı ve iyi modülerleştirilmiş görünüyor. Bu tür projeler ikili formatlar ve kernel API'leri hakkında sıradışı düzeyde bilgi gerektirir. Birçok "ileri seviye" programcı bile kavramsal düzeyde böyle bir şeyi inşa etmekte zorlanabilir.
Genç programcıların kodunu okumak ilgi çekici. Deneyimleri az olsa da kayda değer bir bilgi düzeyiyle tasarım yaptıklarını görebiliyorsunuz. Yazar hızlı öğreniyor gibi görünüyor ve 6 aylık emeğin sonucu harika.
Bu düzeyde bir adanmışlık gerçekten etkileyici. Google Summer of Code, KDE Season of Code, Linux Foundation LFX, X.org EVoC gibi programlara katılmasını tavsiye ederim. Üzerinde çalışılacak pek çok ilginç problem var. Öğrenciyken bu programları bilmiş olmayı isterdim. Artık tam zamanlı bir işim var ve açık kaynağa katkı verecek zamanım yok.
Projeye ilk baktığımda iyi organize edilmiş olduğunu gördüm. Takdiri hak ediyor.
Proje için tebrikler ve bol şans. Compiler'lar, beni bilişime ilgi duymaya yönelten ilk konulardan biriydi.
Bu, 17 yaşındaki çocukların hâlâ CD'leri bildiğini gösteriyor. Disket biçimindeki kaydetme simgesi de belki henüz tamamen demode olmamıştır.
17 yaşında gösterdiği bilgi birikimi ve olgunluk etkileyici. Araştırıp kullandığı konular üniversite düzeyinde beklenir; bu proje ise lisansüstü seviyedeki bir derse ait olabilecek nitelikte. Başarılı bir kariyer diliyorum.
Gençken Turbo Pascal kullanarak 2D grafik kütüphanesi yazdığımı hatırlıyorum. İnterneti keşfetmeden önceydi, bu yüzden kişisel bir eğlence olarak kaldı; ama başkalarının görebileceği bir şey üretmiş olmasını çok iyi buluyorum. Kod temiz, yorumlar iyi yazılmış ve README açık.
Projeyle birlikte "bir debugger yazmak" üzerine bir eğitim hazırlamak sıkıcı olabilir ama çok faydalı olurdu.
Fonksiyon adı ile argümanlar arasına neden boşluk koyduğunu merak ediyorum. 18 yıldır C kodu okuyan biri olarak bu bana biraz yabancı geliyor.
man stylesayfasına bakmasını öneririm.