Stack trace
- İngilizcesi
- Stack Trace
- Türkçe karşılığı
- yığın izi
- Okunuşu
- stek treys
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Stack trace, bir hata oluştuğu anda devam eden fonksiyon çağrılarının listesidir; hatanın çıktığı satırdan programın başladığı yere kadar uzanır.
Stack trace (yığın izi) nedir?
Bir program çöktüğünde ya da bir exception fırlattığında genellikle bir stack trace yazdırır: o anda çalışmakta olan fonksiyonlar, her biri dosya adı ve satır numarasıyla birlikte. Bu, call stack'in, yani programın hangi fonksiyonun hangisini çağırdığını tuttuğu ve her fonksiyonun işi bitince nereye döneceğini bildiği kaydın o anki fotoğrafıdır.
Çoğu dil en içteki çağrıyı önce yazar: hatanın çıktığı satır en üsttedir, ardından onu çağıran fonksiyon, sonra onun çağıranı gelir ve liste programın giriş noktasına kadar iner. Python bunu tersten yapar ve traceback'ini en son çağrı en altta, hata mesajının hemen üstünde olacak şekilde yazar. Okunması gereken satırlar genellikle kendi kodunuzdakilerdir; kütüphanelerden ve çalışma ortamından gelen frame'ler çağrının oraya nasıl ulaştığını gösterir.
Stack trace okumak, anahtarlarınızı kaybettiğinizde adımlarınızı geri izlemeye benzer: kayıp olduklarını fark ettiğiniz yerden başlar, gittiğiniz her yerden geriye doğru ilerlersiniz. Canlı ortamda stack trace'ler loglara ve hata izleme araçlarına gönderilir; böylece geliştiriciler yeniden üretemedikleri hataları bulabilir. Kullanıcılara asla gösterilmemelerinin nedeni de budur: dosya yolları ve fonksiyon adları bir saldırganın işine yarayabilir.
Önemli noktalar
- Stack trace, bir hata oluştuğu anda devam eden fonksiyon çağrılarını listeler.
- Her satır, yani her frame, bir fonksiyonu, bir dosyayı ve bir satır numarasını gösterir.
- Çoğu dil hatalı satırı en üste yazar; Python ise en alta.
- Stack trace'lerin yeri loglar ve hata izleme araçlarıdır, kullanıcının ekranı değil.
Örnek
function parsePrice(text) {
return Number(text.trim());
}
function total(items) {
return items.reduce((sum, item) => sum + parsePrice(item.price), 0);
}
total([{ price: "4.50" }, {}]);
// TypeError: Cannot read properties of undefined (reading 'trim')
// at parsePrice (cart.js:2:22) ← where it failed
// at cart.js:6:44
// at Array.reduce (<anonymous>)
// at total (cart.js:6:16)
// at Object.<anonymous> (cart.js:9:1) ← where it startedSık sorulan sorular
Stack trace ile log mesajı arasındaki fark nedir?
Log mesajı, programın ne yaptığını anlatmak için bilerek yazdığı bir satırdır. Stack trace ise bir hata oluştuğunda kendiliğinden üretilir ve hatanın kodun neresinde çıktığını gösterir. İyi bir hata kaydında ikisi de bulunur: neyin başarısız olduğunu söyleyen bir mesaj ve nerede olduğunu gösteren stack trace.
Stack trace neden benim yazmadığım kodu da gösteriyor?
Kodunuz başka kodların içinde çalışır: framework'ler, kütüphaneler ve dilin çalışma ortamı sizin fonksiyonlarınızı çağırır ve onlar tarafından çağrılır; bu frame'ler çağrının izlediği yolu gösterir. Okumaya kendi dosyalarınızdaki ilk frame'den başlayın; düzeltme genellikle oradadır.
İlgili sayfalar
- İstisnaProgramlamanın Temelleri, s. 28İstisna, bir hata oluştuğunda programın normal akışını kesen bir olaydır; kod bunu programı çökertmek yerine yakalayıp ele alabilir.
- Hata ayıklamaProgramlamanın Temelleri, s. 24Hata ayıklama, bir programın neden yanlış davrandığını bulma, hatalı kodu saptama ve düzeltme sürecidir; çoğu zaman hata ayıklayıcı adlı bir araç kullanılır.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- YığınVeri Yapıları, s. 36Yığın, öğeleri son giren ilk çıkar (LIFO) sırasıyla saklayan bir veri yapısıdır; en son eklenen öğe her zaman ilk çıkarılan öğedir.
- Stack Belleğiİşletim Sistemleri, s. 29Stack belleği, bir thread'in fonksiyonlarının yerel değişkenlerini ve dönüş adreslerini tuttuğu bölgedir; her çağrıda büyür, dönüşte otomatik olarak küçülür.
- LoglamaDevOps ve Bulut, s. 32Loglama, çalışan bir programdaki hata ve istek gibi olaylar hakkında zaman damgalı mesajlar kaydetme pratiğidir; insanlar bunları sonradan inceleyebilir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin