Daha karmaÅık kodlara geçmeden, hata ayıklama hakkında konuÅmamız gerekmekte.
ÃoÄu modern tarayıcı âhata ayıklamaâ(debugging) özelliÄine sahiptir â bu özel arayüz kod yazarken hata bulunmasını ve düzeltilmesini kolaylaÅtırır.
GeliÅtirici özellikleri en iyi olan tarayıcı Chrome olduÄundan bu tarayıcı ile çalıÅacaÄız.
âKaynakâ paneli
Åu anda sizin kullandıÄınız Chrome biraz farklı olabilir. Fakat bu panel kesinlikle orada biryerde olmalı
- Ãrnek Sayfayı Chrome ile açın.
- GeliÅtirici araçlarını F12 (Mac: Cmd+Opt+I) ile açabilirsiniz.
kaynakpanelini seçin.
EÄer ilk defa bu iÅlemi yapıyorsanız görmeniz gereken ekran Åudur:
Sol tarafta bulunan açma kapama butonu size dosyaları gösteren bir tab açar.
Bu panelde hello.js i seçtiÄinizde aÅaÄıdaki gibi bir ekran görmeniz gerekir.
Bu bölüm üçe ayrılmıÅtır:
- Dosya Gezgini: Html, javascript, css ve diÄer dosyalar görseller de dahil olmak üzere açılan sayfaya ait olan kaynakları gösterir. Chrome eklentileri de burada yer alabilir.
- Kod Editörü burası ise kaynak kodu gösterir.
- Bilgi ve kontrol bölgesi burada ise hata ayıklama yapılır.
Åimdi geliÅtirici araçlarının sol köÅesinde bulunan açma kapama bölümünü kullanarak kendinize biraz yer açabilirsiniz.
Konsol
EÄer Esc tuÅuna basarsanız altta konsol açılır. Buraya komutları yazıp Enter ile çalıÅtırabilirsiniz.
Komut çalıÅtıktan sonra sonucunu hemen altında gösterir.
ÃrneÄin burada 1+2 3 çıktısını verir. hello("debugger") dediÄinizde hiçbir Åey bulamadıÄından undefined döndürür.
Kesme Noktası
Ãrnek Kod içerisinde ne olduÄunu incelenecek olursa. hello.js içerisinde 4. satıra tıklayın. Evet 4 e tıklayın koda deÄil.
Tebrikler artık ilk kesme noktanızı oluÅturdunuz. Lütfen 8 e de tıklayın.
AÅaÄıdaki gibi görünmeli. (tıkladıÄınız yerler mavi olmalı)
kesme noktası JavaScript çalıÅırken çalıÅmasını o noktada durdurmasını saÄlar.
Kod durdurulduÄunda, o anki deÄiÅken deÄerlerini inceleyebilir veya konsoldan kod çalıÅtırabilirsiniz. DiÄer bir deyiÅle hata ayıklayabilirsiniz
OluÅturulan bu kesme noktalarını saÄ taraftaki panelde list halinde görmek mümkündür. Bu farklı dosyalarda eÄer kesme noktaları varsa bunları görme açısından yararlı bir özelliktir. EÄer birçok dosyada kesme noktası varsa bu panel vasıtasıyla:
- İstenilen herhangi bir kesme noktasına doÄrudan üstüne tıklayarak gidilebilir.
- Geçici olarak kesme noklarını devre dıÅı bırakılabilir.
- SaÄ tıklayıp Silâe tıkladıÄınızda bu kesme noktalarını silebilirsiniz.
Satır sayılarının yazıldıÄı yere saÄ tıklayarak KoÅullu Kesme Noktası oluÅturabilirsiniz. EÄer ifadeniz doÄruysa bu kesme noktası çalıÅır ve JavaScript çalıÅması durur.
Belirli deÄiÅken deÄerlerine veya parametre deÄerlerine göre çalıÅma durdurulmak istendiÄinde yararlı bir özelliktir.
Debugger komutu
Ayrıca debugger kodu ile de hata ayıklama iÅlemini yapmak mümkündür.
function merhaba(adi) {
let selam = `Merhaba, ${adi}!`;
debugger; // <-- hata ayıklama çalıÅır
say(selam);
}
Bu kod, siz editörde kod yazarken tekrar tarayıcıya geçip, kodu bulup kesme noktası koyma sürecini ortadan kaldırıyor.
Dur ve ne olduÄuna bak
YaptıÄımız örnekte merhaba() sayfa yüklenirken çalıÅmaktadır. Bundan dolayı hata ayıklayıcıyı çalıÅtırmanın en kolay yolu sayfayı yenilemektir. Bunun için F5 (Windows, Linux) veya Cmd+R ile sayfanın yenileyiniz.
Kesme noktasını kodda belirlediÄinizden dolayı 4. satırda JavaScript çalıÅmayı durduracaktır.
Lütfen bilgilerin görüneceÄi dropdownları saÄ panelden açınız. Bu bölümler oklar ile gösterilmiÅtir. Bu bölümler kesme anındaki deÄiÅkenlerin deÄerleri ve kod durumunu incelemeye yarar.
-
Watchâ herhangi bir ifadenin o anki deÄerini gösterir.+iÅaretine basarak ifade girebilirsiniz. Bu ifadenin deÄerini kod ayıklayıcı her halükarda gösterir. Kod çalıÅırken bu deÄerleri her adımda kontrol eder ve sonucunu yazar. -
Call Stackâ İç içe çaÄrı zincirlerini gösterir.Åu anda hata ayıklayıcı
merhaba()fonksiyonunun içindedir veindex.htmltarafından çaÄırılmıÅtır. EÄer yıÄın(stack) bölgesine dikkat ederseniz fonksiyona girdiÄinde nereden çaÄırıldıÄını gösterir. ( herhangi bir fonksiyondan çaÄırılmadıÄından dolayı âanonymousâ olarak göreceksiniz)EÄer yıÄın maddesine tıklayacak olursanız hangi fonksiyondan çaÄırıldıÄını görebilirsiniz.
-
Scopeâ kesme anında var olan deÄiÅkenlerin deÄerlerini gösterirLocalyerel deÄiÅken deÄerlerini gösterir. Ayrıca deÄerlerini kodun saÄ tarafında vurgulanmıŠÅekilde de görebilirsiniz.Globalglobal deÄiÅkenler. Yani fonksiyon dıÅında tanımlanmıŠdeÄerleri görebilirsiniz.Bunların yanında
thisanahtar kelimesi de vardır. Fakat bu konu üzerinden geçmedik.
ÃalıÅma izini sürme
Artık iz sürme safhasına geçebilirsiniz.
SaÄ panelin üstünde sadece bu iÅe has butonlar bulunmaktadır.
- â çalıÅmaya devam et, F8.
-
ÃalıÅmaya devam edilmesini saÄlar. EÄer ayrı bir kesme noktası yoksa çalıÅma kod bitene kadar devam eder.
Ãzerine bir defa tıkladıÄınızda aÅaÄıdaki gibi olur.
ÃalıÅmaya devam edildi,
yaz()fonksiyonunun içerisinde tekrar durdu. Dikkat ederseniz âCall stackâ çaÄrısını bu iÅlem bir artırdı. - â adım at (bir sonraki komutu çalıÅtır), fakat fonksiyonun içine girme, F10.
-
EÄer buna Åimdi tıklarsanız
alertçalıÅır. Ãnemli olan Åeyalertyerine farklı bir fonksiyon da olsa çalıÅma bu fonksiyonun içinde ne yaptıÄına önem vermez ve âüstünden atlarâ. - â adım at, F11.
-
Bir öncekinin aynısı, bir adım gider fakat bu defa eÄer bir fonksiyon varsa onun âiçine girerâ(step into).
- â içinde bulunulan fonksiyonun sonuna kadar devam et, Shift+F11.
-
ÃalıÅma içinde bulunan fonksiyonun sonuna gelir ve orada durur.YanlıÅlıkla iç içe çaÄrının içine girilirse çıkmak için kullanıÅlı bir özelliktir.,
â Tüm kesme noktalarını etkinleÅtirme/devre dıÅı bırakma.
- â Hata olduÄu anda otomatik olarak durdurmayı açma kapama butonu
- EtkinleÅtirildiÄinde, kodda herhangi bir hata olduÄunda çalıÅma otomatik olarak durdurulur. Bu noktada analizlerinizi yapabilirsiniz. EÄer hata varsa hata ayıklama ekranını açabilir ve bu özelliÄi etkinleÅtirerek hatanın nerede olduÄunu bulabilirsiniz.
Satır numaralarına saÄ tıklayıp âBuradan devam etâ özelliÄi ile kodu bir kaç adım ileriden devam etmesini saÄlayabilirsiniz. Böylece yeniden bir kesme noktası oluÅturmanıza gerek kalmaz.
Loglama
Konsola basit bir Åey yazdıracaÄınız zaman console.log fonksiyonunu kullanabilirsiniz. AÅaÄıdaki örnekte ekrana 0 ile 4 arasındaki deÄerler yazılır.
// çalıÅmasını görmek için lütfen geliÅtirici konsolunu açınız.
for (let i = 0; i < 5; i++) {
console.log("deger", i);
}
Normal kullanıcı bu çıktıyı ekranda göremez, bunun için geliÅtirici konsoluna girmesi gerekir.
EÄer kodunuzun içerisinde yeterli derecede log varsa hata ayıklamanıza gerek yoktur.
Ãzet
BahsettiÄimiz gibi çalıÅan kodu durdurmanın üç farklı yönü vardır. Bunlar:
- Kesme noktası ile durdurma
debuggerkelimesi ile durdurma- EÄer hata olduÄunda aç/kapa butonu aktifse çalıÅmada hata olduÄunda durdurma
Bunların sonucunda çalıÅmada ne gibi hatalar olduÄunu görebilirsiniz.
Bunlara ek olarak https://developers.google.com/web/tools/chrome-devtools adresinden daha geniÅ ve yeni bilgilere ulaÅabilirsiniz.
Bu bölümdeki bilgiler sizin hata ayıklama iÅlemine baÅlamanızda yardımcı olacaktır. Fakat tarayıcı ile alakalı çok fazla iÅlem yapıyorsanız bu durumda geliÅtirici derinlemesine incelemeniz gerekmektedir.
Tabi bunun yanında deneme yanılma yöntemi ile de geliÅtirici araçlarının özelliklerini keÅfedebilirsiniz. Unutmayın saÄ tıklayarak farklı bölgelerde farklı fonksiyonları görebilirsiniz.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)