Ana içeriğe geç

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.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/stack-trace

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

Bir JavaScript hatasının stack trace'i, yukarıdan aşağı okunurjavascript
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 started

Sı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

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar