JavaScript: existe-t-il un moyen pour que Chrome supprime toutes les erreurs?

258

Je recherche un équivalent dans Chrome à la fonctionnalité "pause sur toutes les erreurs" de Firebug. Dans l'onglet Scripts, Chrome a une "pause sur toutes les exceptions", mais ce n'est pas tout à fait la même chose que de casser toutes les erreurs.

Par exemple, lors du chargement d'une page avec le code suivant, j'aimerais que Chrome se casse sur la ligne foo.bar = 42. Au lieu de cela, même en activant la "pause sur toutes les exceptions", je n'obtiens pas le résultat attendu.

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

Vous pouvez essayer le code collé ci-dessus sur cette page ou utiliser ce jsFiddle .

avernet
la source
À quels autres types d'erreurs pensez-vous?
Matthew Crumley
1
Toute erreur, par exemple: une référence à une variable non définie (comme dans console.log(gaga)) ou à une propriété non définie (comme dans window.foo.bar).
avernet
2
Ceux-ci devraient lever des exceptions. L'option "pause sur les exceptions" fonctionne pour moi. Les seules erreurs auxquelles je peux penser qui ne fonctionneraient pas sont les erreurs de syntaxe, mais elles se produisent avant l'exécution du code.
Matthew Crumley
1
Oui, j'essaie maintenant, et cela semble casser où est l'erreur. Je l'avais fait il y a quelques jours, et au lieu de rompre où l'erreur se trouve dans le code, il se cassait là où une exception provoquée par l'erreur était interceptée, tout en haut de la pile. Allez comprendre!
avernet

Réponses:

210

Modifier: le lien d'origine auquel j'ai répondu n'est plus valide . L'URL la plus récente serait https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions à partir du 2016-11-11.

Je réalise que cette question a une réponse, mais elle n'est plus exacte. Utilisez le lien ci-dessus ^


(lien remplacé par édité ci-dessus) - vous pouvez maintenant le paramétrer pour casser toutes les exceptions ou seulement celles non gérées. (Notez que vous devez être dans l' onglet Sources pour voir le bouton.)

Chrome a également ajouté d'autres fonctionnalités de point d'arrêt vraiment utiles, telles que la rupture des changements DOM ou des événements réseau.

Normalement, je ne répondrais pas à une question, mais j'avais la même question moi-même, et j'ai trouvé cette réponse maintenant fausse, alors j'ai pensé que je mettrais ces informations ici pour les personnes qui sont venues plus tard dans la recherche. :)

Brian Arnold Sinclair
la source
1
Brian, merci, ça fonctionne vraiment maintenant. Cette fonctionnalité était déjà disponible en février de l'année dernière, lorsque j'ai posté cela, mais elle ne fonctionnait pas correctement, alors qu'elle semble fonctionner correctement maintenant. Merci pour les commentaires.
avernet
Le bouton auquel fait référence votre lien ne semble plus exister (du moins dans la version actuelle du canal de développement Chrome). Je ne sais pas comment recommencer.
Andrey Fedorov
2
Salut Andrey, je regarde Chrome Canary et je vois toujours le bouton là-bas. C'est le quatrième bouton à partir de la gauche, comme indiqué sur d.pr/i/DHwT - cliquez une fois et il passe en pause sur toutes les exceptions, où un deuxième clic le mènera à la pause sur les exceptions non capturées. Un troisième clic revient à la valeur par défaut de ne pas s'arrêter.
Brian Arnold Sinclair
Le lien est rompu, je le crains :(
Rick
1
Toutes mes excuses pour ne pas avoir vu le commentaire plus tôt! Il semble que developers.google.com/web/tools/chrome-devtools/javascript/… ait l'essentiel du contenu d'avant. Je modifierai également la réponse originale, si je le peux.
Brian Arnold Sinclair
298

J'ai eu du mal à l'obtenir, alors je poste des photos montrant différentes options:

Chrome 75.0.3770.142 [29 juillet 2018]

Interface utilisateur très très similaire depuis au moins Chrome 38.0.2125.111 [11 décembre 2014]

Dans l'onglet Sources:

entrez la description de l'image ici

Lorsque le bouton est activé, vous pouvez Pause On Caught Exceptionsavec la case à cocher ci-dessous: entrez la description de l'image ici


Versions précédentes

Chrome 32.0.1700.102 [03 fév 2014]

entrez la description de l'image ici

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Chrome 27.0.1453.93 Stable

Options de débogage

Maxence
la source
22
Je dois féliciter Facebook pour avoir créé un lien vers cela directement dans ses documents. +1
jimm101
1
Également pour les gens à noter, les boutons se cacheront simplement si la barre latérale n'est pas développée, sans aucune indication qu'ils sont là.
Eric Majerus
17

Ceci est désormais pris en charge dans Chrome par le bouton "Pause de toutes les exceptions".

Pour l'activer:

  • Accédez à l'onglet "Sources" dans les outils de développement Chrome
  • Cliquez sur le bouton "Pause" en bas de la fenêtre pour passer en "Pause sur tous les modes d'exceptions".

Notez que ce bouton a plusieurs états. Continuez à cliquer sur le bouton pour basculer entre

  • "Pause sur toutes les exceptions" - le bouton est de couleur bleu clair
  • "Pause sur les exceptions non détectées", le bouton est coloré en violet .
  • "Ne faites pas de pause sur les exceptions" - le bouton est de couleur grise
Brad Parks
la source
1

À peu près n'importe quelle erreur lèvera une exception. Les seules erreurs auxquelles je peux penser qui ne fonctionneraient pas avec l'option "pause sur les exceptions" sont les erreurs de syntaxe, qui se produisent avant l'exécution du code, il n'y a donc pas de place pour s'arrêter de toute façon et aucun code ne s'exécutera.

Apparemment, Chrome ne s'arrêtera pas sur l'exception s'il se trouve dans un bloc try-catch. Il s'arrête uniquement sur les exceptions non capturées. Je ne connais aucun moyen de le changer.

Si vous avez juste besoin de savoir sur quelle ligne l'exception s'est produite (alors vous pouvez définir un point d'arrêt si l'exception est reproductible), l' Errorobjet donné au bloc catch a une stackpropriété qui indique où l'exception s'est produite.

Matthew Crumley
la source
Matthew, j'ai "reproduit" quelque chose de similaire à l'affaire que j'avais (voir la question mise à jour). D'une manière ou d'une autre, je n'obtiens pas le débogueur pour casser cette erreur. Avez-vous une idée de pourquoi cela ne fonctionnerait pas avec Chrome (c'est le cas avec Firebug lors de l'activation de "casser toutes les erreurs").
avernet
@Mathhew, j'ai créé une autre réponse disant que c'est impossible et je l'ai marquée comme réponse. Si vous ou quelqu'un d'autre trouvez une solution, je changerai le marqueur.
avernet
1

Malheureusement, les outils de développement de Chrome semblent incapables de "s'arrêter à toutes les erreurs", comme le fait Firebug.

avernet
la source
Cliquez simplement sur le bouton Pause UNE FOIS (il sera de couleur bleue) et ne cochez pas l'option Pause en cas d'exceptions. Tout cela, il ne mettra en pause que les erreurs.
Roy Shoa