web-dev-qa-db-fra.com

JavaScript: y a-t-il un moyen d'obtenir que Chrome tombe en panne sur toutes les erreurs?

Je recherche un équivalent dans Chrome de la fonctionnalité "Interrompre toutes les erreurs" de Firebug. Dans l'onglet Scripts, Chrome dispose d'une "pause sur toutes les exceptions", mais cela ne signifie pas nécessairement que toutes les erreurs sont interrompues.

Par exemple, lors du chargement d'une page avec le code suivant, je souhaiterais que Chrome soit interrompu sur la ligne foo.bar = 42. Au lieu de cela, même en activant l'option "Suspendre 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 en utilisant ceci jsFiddle .

249
avernet

Modifier: Le lien d'origine auquel j'ai répondu est maintenant invalide . L'URL la plus récente serait https://developers.google.com/web/tools/chrome-devtools/javascript/add-points d'arrêt # exceptions à partir de 2016-11-11.

Je me rends compte 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 définir pour qu'il casse toutes les exceptions ou simplement celles qui ne sont pas gérées. (Notez que vous devez être dans l'onglet Sources pour voir le bouton.)

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

Normalement, je ne répondrais pas à une question, mais j'avais moi-même la même question et j'ai trouvé cette réponse maintenant erronée. :)

205

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

Pour l'activer:

  • Accédez à l'onglet "Sources" dans Chrome Outils de développement.
  • Cliquez sur le bouton "Pause" en bas de la fenêtre pour passer en "Pause sur le mode d'exception".

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

  • "Pause sur toutes les exceptions" - le bouton est coloré bleu clair
  • "Pause sur les exceptions non saisies", le bouton est coloré violet.
  • "Ne pas suspendre les exceptions" - le bouton est coloré gris
17
Brad Parks

Malheureusement, les outils de développement de Chrome ne semblent pas être en mesure de "s’arrêter sur toutes les erreurs", contrairement à Firebug.

1
avernet

À peu près toutes les erreurs jetteront une exception. Les seules erreurs que je puisse imaginer qui ne fonctionneraient pas avec l'option "pause sur les exceptions" sont des erreurs de syntaxe, qui se produisent avant que le code soit exécuté. Il n'y a donc aucun endroit où faire une pause et aucun code ne sera exécuté.

Apparemment, Chrome ne fera pas de pause sur l'exception si elle se trouve dans un bloc try-catch. Il ne marque que des 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 (vous pouvez définir un point d'arrêt si l'exception est reproductible), l'objet Error donné au bloc catch a une propriété stack qui montre où une exception s'est produite.

1
Matthew Crumley