JavaScript : Existe-t-il un moyen de faire en sorte que Chrome s'arrête sur toutes les erreurs ?

Je suis à la recherche d'un équivalent dans Chrome de la fonctionnalité "break on all errors" de Firebug. Dans l'onglet Scripts, Chrome dispose d'une fonction "pause sur toutes les exceptions", mais ce n'est pas tout à fait la même chose qu'une rupture sur toutes les erreurs.

Par exemple, lors du chargement d'une page contenant le code suivant, j'aimerais que Chrome s'arrête à la ligne foo.bar = 42. Au lieu de cela, même en activant l'option "Pause sur toutes les exceptions", je n'obtiens pas le résultat escompté.

<!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][1] ou en utilisant ce [jsFiddle][2].

[1] : http://dl.dropbox.com/u/6900/try/ee-chrome-errors.html [2] : http://jsfiddle.net/avernet/KvjNB/

Solution

Edit : Le lien original avec lequel j'ai répondu est maintenant invalide. La nouvelle URL serait https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions à partir de 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 l'édition ci-dessus) - vous pouvez maintenant le configurer pour qu'il s'arrête sur toutes les exceptions ou seulement sur 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é d'autres fonctionnalités de points d'arrêt très utiles, comme l'interruption en cas de modifications du DOM ou d'événements réseau.

Normalement, je ne répondrais pas à une question, mais je me suis posé la même question et j'ai trouvé une réponse erronée, alors je me suis dit que j'allais mettre cette information ici pour les personnes qui viendraient plus tard faire des recherches :)

Commentaires (8)

Presque toutes les erreurs provoquent des exceptions. Les seules erreurs auxquelles je pense qui ne fonctionneraient pas avec l'option "pause on exceptions&quot ; sont les erreurs de syntaxe, qui se produisent avant l'exécution du code, de sorte qu'il n'y a de toute façon aucun endroit pour faire une pause et qu'aucune partie du code ne sera exécutée.

Apparemment, Chrome ne s'arrête pas sur l'exception si elle se trouve dans un bloc try-catch. Il n'effectue de pause que sur les exceptions non capturées. Je ne connais pas de moyen de le modifier.

Si vous avez juste besoin de savoir sur quelle ligne l'exception s'est produite (vous pourrez alors mettre 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ù l'exception s'est produite.

Commentaires (2)

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

Commentaires (1)