JavaScript: Chrome'un tüm hataları çözmesini sağlamanın bir yolu var mı?


258

Firebug "tüm hataları kırmak" işlevselliği için eşdeğer bir Chrome arıyorum. Komut Dosyaları sekmesinde, Chrome'un "tüm istisnalarda duraklama" özelliği vardır, ancak bu, tüm hataları kırmakla aynı şey değildir.

Örneğin, aşağıdaki kodla bir sayfa yüklerken, Chrome'un satırda kırılmasını istiyorum foo.bar = 42. Bunun yerine, "Tüm istisnalarda duraklatma" yı etkinleştirirken bile, beklenen sonucu elde edemiyorum.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

Bu sayfaya yukarıda yapıştırılan kodu veya bu jsFiddle'ı kullanarak deneyebilirsiniz .


Başka ne tür hatalar düşünüyorsun?
Matthew Crumley

1
Herhangi bir hata, örneğin: tanımlanmamış bir değişkene (olduğu gibi console.log(gaga)) veya tanımlanmamış bir özelliğe (olduğu gibi window.foo.bar) bir başvuru .
avernet

2
Bunlar istisnalar atmalı. "İstisnalarda duraklat" seçeneği benim için çalışıyor. Bunun işe yaramayacağını düşünebileceğim tek hatalar sözdizimi hatalarıdır, ancak kod yürütülmeden önce bunlar gerçekleşir.
Matthew Crumley

1
Evet, şimdi deniyorum ve hatanın nerede olduğu kırılıyor gibi görünüyor. Bunu birkaç gün önce yapmıştım ve hatanın kodda olduğu yeri kırmak yerine, hatanın neden olduğu bir istisnanın yığının yukarı çıktığı yerde kırılıyordu. Git şekil!
avernet

Yanıtlar:


210

Düzenleme: Yanıtladığım orijinal bağlantı artık geçersiz . Yeni URL https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions olur Yanıtladığım 2016-11-11 itibarıyla .

Bu sorunun bir cevabı olduğunu biliyorum, ama artık doğru değil. Yukarıdaki bağlantıyı kullanın ^


(bağlantı yukarıda düzenlenmiş olarak değiştirildi) - artık tüm istisnaları veya yalnızca ele alınmamış olanları ihlal edecek şekilde ayarlayabilirsiniz. ( Düğmeyi görmek için Kaynaklar sekmesinde olmanız gerektiğini unutmayın .)

Chrome, şimdi DOM değişikliklerini veya ağ etkinliklerini bozma gibi bazı gerçekten kullanışlı kesme noktası özellikleri ekledi.

Normalde bir soruyu yeniden yanıtlamam, ama aynı soruyu kendim aldım ve şimdi yanlış yanıtı buldum, bu yüzden daha sonra arama yapan kişiler için bu bilgiyi buraya koyacağımı düşündüm. :)


1
Brian, teşekkür ederim, gerçekten şimdi çalışıyor. Bu özellik, geçen yılın Şubat ayında, bunu yayınladığımda zaten mevcuttu, ancak şu anda düzgün çalışıyor gibi görünüyor, düzgün çalışmıyor değildi. Geri dönüşünüz için teşekkür ederiz.
avernet

Bağlantınız tarafından belirtilen düğme artık orada görünmüyor (en azından mevcut geliştirme kanalı Chrome sürümünde). Bunu nasıl yapacağınızdan emin değilim.
Andrey Fedorov

2
Merhaba Andrey, Chrome Canary'ye bakıyorum ve hala düğmeyi görüyorum. D.pr/i/DHwT'de gösterildiği gibi soldan dördüncü düğme - bir kez tıklayın ve ikinci bir tıklamanın Yakalanmayan İstisnaları Duraklat'a götüreceği Tüm İstisnalarda Duraklat'a gider. Üçüncü bir tıklama, duraklatmama varsayılanına geri döner.
Brian Arnold Sinclair

Bağlantı koptu Korkarım :(
Rick

1
Yorumu daha önce görmediğiniz için özür dileriz! Developers.google.com/web/tools/chrome-devtools/javascript/… 'ın içeriğin öncekinden olduğu anlaşılıyor . Yapabilirsem orijinal cevabı da değiştireceğim.
Brian Arnold Sinclair

298

Bunu almakta zorlandım, bu yüzden farklı seçenekler gösteren resimler yayınlıyorum:

Chrome 75.0.3770.142 [29 Temmuz 2018]

En azından Chrome 38.0.2125.111'den bu yana çok benzer bir kullanıcı arayüzü [11 Aralık 2014]

Sekmede Sources:

resim açıklamasını buraya girin

Düğme etkinleştirildiğinde, Pause On Caught Exceptionsaşağıdaki onay kutusunu kullanarak şunları yapabilirsiniz : resim açıklamasını buraya girin


Önceki sürümler

Chrome 32.0.1700.102 [03 Şubat 2014]

resim açıklamasını buraya girin

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin

Krom 27.0.1453.93 Kararlı

Hata ayıklama seçenekleri


22
Facebook'a bunu doğrudan dokümanlarında bağladığı için övmeliyim. +1
jimm101

1
Ayrıca, insanların not etmesi için, kenar çubuğu genişletilmezse düğmeler gizlenir ve hiçbir gösterge yoktur.
Eric Majerus

17

Bu, artık Chrome'da "Tüm istisnalarda duraklat" düğmesiyle desteklenmektedir.

Etkinleştirmek için:

  • Chrome Geliştirici Araçları'ndaki "Kaynaklar" sekmesine gidin
  • "Tüm özel durumlar modunda duraklat" a geçmek için pencerenin altındaki "Duraklat" düğmesini tıklayın.

Bu düğmenin birden fazla durumu olduğunu unutmayın. Aralarında geçiş yapmak için düğmeyi tıklamaya devam edin

  • "Tüm istisnalarda duraklat" - düğme açık mavi renktedir
  • "Yakalanmamış istisnalarda duraklama" düğmesi mor renklidir .
  • "İstisnalarda duraklama" - düğme gri renktedir

1

Hemen hemen her hata bir istisna atar. "İstisnalar üzerinde duraklatma" seçeneği ile işe yaramaz düşünebilirsiniz sadece hatalar kod çalıştırılmadan önce sözdizimi hataları vardır, bu nedenle yine de duraklamak için bir yer yoktur ve kod hiçbiri çalışmayacak.

Görünüşe göre, Chrome bir try-catch bloğunun içindeyse istisnada duraklamayacaktır. Yalnızca yakalanmayan istisnaları duraklatır. Bunu değiştirmenin bir yolunu bilmiyorum.

İstisnanın hangi satırda olduğunu bilmeniz gerekiyorsa (istisna yeniden üretilebiliyorsa bir kesme noktası ayarlayabilirsiniz), Errorcatch bloğuna verilen nesnenin stackistisnanın nerede olduğunu gösteren bir özelliği vardır.


Matthew, yaşadığım davaya benzer bir şeyi "yeniden ürettim" (güncellenmiş soruya bakın). Her nasılsa, hata ayıklayıcının bu hatayı kırmasını sağlayamıyorum. Bunun neden Chrome ile çalışmadığına dair bir fikriniz var mı?
avernet

@Mathew, bunun imkansız olduğunu söyleyen başka bir cevap oluşturdum ve cevap olarak işaretledim. Siz veya bir başkası bir çözüm bulursa, işaretçiyi değiştireceğim.
Şubat'ta

1

Ne yazık ki, Firebug'un yaptığı gibi Chrome'daki Geliştirici Araçları "tüm hatalarda duramıyor" gibi görünüyor.


Duraklat düğmesine TEK TIME tıklayın (Mavi renkte olacaktır) ve Yakalanan İstisnalarda Duraklat seçeneğini işaretlemeyin. Hepsi bu, sadece hatalarda Duraklatılacaktır.
Roy Shoa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.