JavaScript: Gibt es eine Möglichkeit, Chrome dazu zu bringen, alle Fehler zu beheben?

258

Ich suche nach einer Entsprechung in Chrome zur Funktion "Alle Fehler brechen" von Firebug. Auf der Registerkarte "Skripte" hat Chrome eine "Pause bei allen Ausnahmen", dies ist jedoch nicht ganz das Gleiche wie das Unterbrechen aller Fehler.

Wenn ich beispielsweise eine Seite mit dem folgenden Code lade, möchte ich, dass Chrome in der Zeile unterbrochen wird foo.bar = 42. Stattdessen erhalte ich selbst beim Aktivieren der Option "Bei allen Ausnahmen pausieren" nicht das erwartete Ergebnis.

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

Sie können den oben auf dieser Seite eingefügten Code oder diese jsFiddle verwenden .

Avernet
quelle
An welche anderen Fehler denken Sie?
Matthew Crumley
1
Jeder Fehler, sagen wir: ein Verweis auf eine undefinierte Variable (wie in console.log(gaga)) oder auf eine undefinierte Eigenschaft (wie in window.foo.bar).
Avernet
2
Diese sollten Ausnahmen werfen. Die Option "Bei Ausnahmen pausieren" funktioniert bei mir. Die einzigen Fehler, an die ich denken kann, dass sie nicht funktionieren würden, sind Syntaxfehler, aber diese treten auf, bevor der Code ausgeführt wird.
Matthew Crumley
1
Ja, ich versuche es jetzt und es scheint zu brechen, wo der Fehler liegt. Ich hatte dies vor ein paar Tagen getan, und anstatt zu brechen, wo der Fehler im Code ist, brach es, wo eine durch den Fehler verursachte Ausnahme gefangen wurde, ganz oben im Stapel. Stelle dir das vor!
Avernet

Antworten:

210

Bearbeiten: Der ursprüngliche Link, mit dem ich geantwortet habe, ist jetzt ungültig. Die neuere URL lautet ab dem 11.11.2016 https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions .

Mir ist klar, dass diese Frage eine Antwort hat, aber sie ist nicht mehr richtig. Verwenden Sie den Link oben ^


(Link ersetzt durch oben bearbeitet) - Sie können ihn jetzt so einstellen, dass alle oder nur nicht behandelte Ausnahmen unterbrochen werden. (Beachten Sie, dass Sie sich auf der Registerkarte Quellen befinden müssen , um die Schaltfläche anzuzeigen.)

Chrome hat jetzt auch einige andere wirklich nützliche Haltepunktfunktionen hinzugefügt, z. B. das Unterbrechen von DOM-Änderungen oder Netzwerkereignissen.

Normalerweise würde ich eine Frage nicht erneut beantworten, aber ich hatte selbst dieselbe Frage und fand diese jetzt falsche Antwort. Ich dachte, ich würde diese Informationen hier für Leute einfügen, die später bei der Suche mitkamen. :) :)

Brian Arnold Sinclair
quelle
1
Brian, danke, es funktioniert jetzt tatsächlich. Diese Funktion war bereits im Februar letzten Jahres verfügbar, als ich sie gepostet habe, aber sie funktionierte nicht richtig, obwohl sie jetzt gut zu funktionieren scheint. Danke für die Rückmeldung.
Avernet
Die Schaltfläche, auf die Ihr Link verweist, scheint nicht mehr vorhanden zu sein (zumindest in der aktuellen Chrome-Version des Entwicklerkanals). Ich bin mir nicht sicher, wie ich das noch einmal machen soll.
Andrey Fedorov
2
Hallo Andrey, ich schaue auf Chrome Canary und sehe dort immer noch den Knopf. Es ist die vierte Schaltfläche von links, wie unter d.pr/i/DHwT gezeigt. Klicken Sie einmal und gehen Sie in Pause bei allen Ausnahmen, wo ein zweiter Klick dazu führt , dass bei nicht erfassten Ausnahmen angehalten wird. Ein dritter Klick kehrt zum Standard zurück, nicht anzuhalten.
Brian Arnold Sinclair
Der Link ist leider kaputt :(
Rick
1
Entschuldigung, dass Sie den Kommentar nicht früher gesehen haben! Es scheint, dass developer.google.com/web/tools/chrome-devtools/javascript/… den Kern des Inhalts von zuvor enthält. Ich werde auch die ursprüngliche Antwort ändern, wenn ich kann.
Brian Arnold Sinclair
298

Ich habe Probleme damit, also poste ich Bilder mit verschiedenen Optionen:

Chrome 75.0.3770.142 [29. Juli 2018]

Sehr sehr ähnliche Benutzeroberfläche seit mindestens Chrome 38.0.2125.111 [11. Dezember 2014]

In der Registerkarte Sources:

Geben Sie hier die Bildbeschreibung ein

Wenn die Schaltfläche aktiviert ist, können Sie Pause On Caught Exceptionsmit dem folgenden Kontrollkästchen: Geben Sie hier die Bildbeschreibung ein


Vorherige Versionen

Chrome 32.0.1700.102 [03. Februar 2014]

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Chrome 27.0.1453.93 Stabil

Debug-Optionen

Maxence
quelle
22
Ich muss Facebook dafür loben, dass es direkt in seinen Dokumenten darauf verlinkt ist. +1
jimm101
1
Außerdem werden die Schaltflächen einfach ausgeblendet, wenn die Seitenleiste nicht erweitert wird, ohne dass angezeigt wird, dass sie vorhanden sind.
Eric Majerus
17

Dies wird jetzt in Chrome durch die Schaltfläche "Bei allen Ausnahmen anhalten" unterstützt.

So aktivieren Sie es:

  • Wechseln Sie in den Chrome Developer Tools zur Registerkarte "Quellen"
  • Klicken Sie unten im Fenster auf die Schaltfläche "Pause", um in den Modus "Bei allen Ausnahmen pausieren" zu wechseln.

Beachten Sie, dass diese Schaltfläche mehrere Status hat. Klicken Sie weiter auf die Schaltfläche, um zwischen zu wechseln

  • "Bei allen Ausnahmen pausieren" - die Schaltfläche ist hellblau gefärbt
  • "Pause bei nicht erfassten Ausnahmen", die Schaltfläche ist lila gefärbt .
  • "Bei Ausnahmen nicht pausieren" - die Schaltfläche ist grau gefärbt
Brad Parks
quelle
1

Fast jeder Fehler löst Ausnahmen aus. Die einzigen Fehler, die ich mir vorstellen kann, die mit der Option "Pause bei Ausnahmen" nicht funktionieren würden, sind Syntaxfehler, die auftreten, bevor der Code ausgeführt wird. Es gibt also keinen Platz zum Anhalten und keiner der Codes wird ausgeführt.

Anscheinend wird Chrome die Ausnahme nicht pausieren, wenn sie sich in einem Try-Catch-Block befindet. Es wird nur bei nicht erfassten Ausnahmen angehalten. Ich kenne keine Möglichkeit, dies zu ändern.

Wenn Sie nur wissen müssen, in welcher Zeile die Ausnahme aufgetreten ist (dann können Sie einen Haltepunkt festlegen, wenn die Ausnahme reproduzierbar ist), verfügt das Errordem catch-Block zugewiesene Objekt über eine stackEigenschaft, die anzeigt, wo die Ausnahme aufgetreten ist.

Matthew Crumley
quelle
Matthew, ich "reproduzierte" etwas Ähnliches wie ich (siehe die aktualisierte Frage). Irgendwie kann der Debugger diesen Fehler nicht beheben. Haben Sie eine Vorstellung davon, warum dies mit Chrome nicht funktioniert (mit Firebug, wenn "Alle Fehler brechen" aktiviert ist).
Avernet
@Mathhew, ich habe eine andere Antwort erstellt, die besagt, dass dies unmöglich ist, und sie als Antwort markiert. Wenn Sie oder jemand anderes eine Lösung findet, werde ich den Marker ändern.
Avernet
1

Leider scheinen die Entwicklertools in Chrome nicht in der Lage zu sein, "alle Fehler zu stoppen", wie dies bei Firebug der Fall ist.

Avernet
quelle
Klicken Sie einfach EINMAL auf die Schaltfläche Pause (sie wird blau angezeigt) und markieren Sie nicht die Option Pause bei gefangenen Ausnahmen. Das alles wird nur bei Fehlern pausieren.
Roy Shoa