JavaScript: Ar yra būdas priversti "Chrome" nutraukti visas klaidas?

Ieškau "Chrome" lygiaverčio "Firebug" funkcijos "nutraukti visas klaidas" atitikmens. Skriptų skirtuke "Chrome" yra "pauzė visose išimtyse", bet tai ne visai tas pats, kas nutraukti visas klaidas.

Pavyzdžiui, įkeliant puslapį su toliau nurodytu kodu, norėčiau, kad "Chrome" nutrauktų eilutę foo.bar = 42. Tačiau net ir įjungus "Pause on all exceptions", negaunu laukiamo rezultato.

<!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>

Galite pabandyti pirmiau įdėtą kodą šiame puslapyje arba naudodami šį [jsFiddle][2].

Sprendimas

Edit: Pradinė nuoroda, su kuria atsakiau, dabar negalioja.Naujesnis URL adresas būtų https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions nuo 2016-11-11.

Suprantu, kad šis klausimas turi atsakymą, bet jis' nebėra tikslus. Naudokite aukščiau pateiktą nuorodą ^


(nuoroda pakeista į redaguotą aukščiau) - dabar galite nustatyti, kad ji nutrūktų dėl visų išimčių arba tik dėl neapdorotų išimčių. (Atkreipkite dėmesį, kad norėdami pamatyti mygtuką, turite būti skirtuke Sources).

Be to, "Chrome's" pridėjo keletą kitų tikrai naudingų pertraukos taškų funkcijų, pvz., pertraukimą pasikeitus DOM ar įvykus tinklo įvykiui.

Įprastai aš'iš naujo neatsakyčiau į klausimą, bet pats turėjau tokį patį klausimą ir radau šį dabar jau neteisingą atsakymą, todėl pamaniau, kad įdėsiu šią informaciją čia žmonėms, kurie atėjo vėliau ieškodami :)

Komentarai (8)

Beveik bet kokia klaida bus išmetama kaip išimtis. Vienintelės klaidos, apie kurias galiu pagalvoti, kad jos neveiks su "pause on exceptions" parinktimi, yra sintaksės klaidos, kurios įvyksta prieš pradedant vykdyti bet kokį kodą, todėl vis tiek nėra kur daryti pauzės ir joks kodas nebus vykdomas.

Akivaizdu, kad "Chrome" nesustabdys išimties, jei ji yra "try-catch" bloko viduje. Ji sustabdo tik negautas išimtis. Nežinau, kaip tai pakeisti.

Jei jums tereikia žinoti, kurioje eilutėje įvyko išimtis (tada galėtumėte nustatyti pertraukos tašką, jei išimtis yra atkuriama), Error objektas, pateikiamas į "catch" bloką, turi stack savybę, kuri parodo, kurioje eilutėje įvyko išimtis.

Komentarai (2)

Deja, atrodo, kad "Chrome" programuotojo įrankiai negali "sustoti dėl visų klaidų", kaip tai daro "Firebug".

Komentarai (1)