JavaScript: c'è un modo per convincere Chrome a interrompere tutti gli errori?


258

Sto cercando un equivalente in Chrome per la funzionalità "rompi su tutti gli errori" di Firebug. Nella scheda Script, Chrome ha una "pausa su tutte le eccezioni", ma ciò non equivale a interrompere tutti gli errori.

Ad esempio, quando si carica una pagina con il seguente codice, vorrei che Chrome si interrompesse foo.bar = 42. Invece, anche quando abilito la "Pausa su tutte le eccezioni", non ottengo il risultato atteso.

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

Puoi provare il codice incollato sopra in questa pagina o usando questo jsFiddle .


A quali altri tipi di errori stai pensando?
Matthew Crumley,

1
Qualsiasi errore, diciamo: un riferimento a una variabile non definita (come in console.log(gaga)) o a una proprietà non definita (come in window.foo.bar).
avernet,

2
Quelli dovrebbero generare eccezioni. L'opzione "Pausa sulle eccezioni" funziona per me. Gli unici errori a cui riesco a pensare che non funzionerebbero sono errori di sintassi, ma quelli che si verificano prima che il codice venga eseguito.
Matthew Crumley,

1
Sì, ci sto provando ora e sembra spezzare dove si trova l'errore. L'avevo fatto qualche giorno fa, e invece di rompere dove si trova l'errore nel codice, stava rompendo dove un'eccezione causata dall'errore veniva catturata, in cima allo stack. Vai a capire!
avernet,

Risposte:


210

Modifica: il link originale con cui ho risposto non è ora valido . L'URL più recente sarebbe https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions a partire dall'11-11-2016.

Mi rendo conto che questa domanda ha una risposta, ma non è più accurata. Usa il link sopra ^


(link sostituito da modificato in precedenza): ora puoi impostarlo per interrompere tutte le eccezioni o solo quelle non gestite. (Nota che devi essere nella scheda Sorgenti per vedere il pulsante.)

Chrome ha anche aggiunto alcune altre funzionalità di breakpoint davvero utili, come l'interruzione di modifiche DOM o eventi di rete.

Normalmente non risponderei a una domanda, ma avevo la stessa domanda da solo, e ho trovato questa risposta ora sbagliata, quindi ho pensato di mettere queste informazioni qui per le persone che sono venute più tardi nella ricerca. :)


1
Brian, grazie, ora funziona davvero. Questa funzione era già disponibile nel febbraio dello scorso anno, quando l'ho pubblicata, ma non funzionava correttamente, mentre ora sembra funzionare bene. Grazie per il feedback.
avernet

Il pulsante a cui fa riferimento il tuo link non sembra essere più presente (almeno nella versione Chrome del canale di sviluppo corrente). Non sono sicuro di come farlo di nuovo.
Andrey Fedorov,

2
Ciao Andrey, sto guardando Chrome Canary e vedo ancora il pulsante lì. È il quarto pulsante da sinistra, come mostrato in d.pr/i/DHwT - fai clic una volta e accede a Pausa su tutte le eccezioni, dove un secondo clic lo porterà a Pausa su eccezioni non rilevate. Un terzo clic torna al valore predefinito di non pausa.
Brian Arnold Sinclair,

Temo che il collegamento sia rotto :(
Rick,

1
Ci scusiamo per non aver visto prima il commento! Sembra che developers.google.com/web/tools/chrome-devtools/javascript/… abbia l'essenza del contenuto di prima. Modificherò anche la risposta originale, se posso.
Brian Arnold Sinclair,

298

Ho problemi a ottenerlo, quindi pubblico immagini che mostrano diverse opzioni:

Chrome 75.0.3770.142 [29 luglio 2018]

UI molto simile da almeno Chrome 38.0.2125.111 [11 dicembre 2014]

Nella scheda Sources:

inserisci qui la descrizione dell'immagine

Quando il pulsante è attivato, puoi selezionare Pause On Caught Exceptionsla casella qui sotto: inserisci qui la descrizione dell'immagine


Versione precedente

Chrome 32.0.1700.102 [03 febbraio 2014]

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Chrome 27.0.1453.93 Stabile

Opzioni di debug


22
Devo elogiare Facebook per il collegamento a questo direttamente nei loro documenti. +1
jimm101,

1
Anche per le persone da notare, i pulsanti si nasconderanno semplicemente se la barra laterale non è espansa, senza alcuna indicazione che siano lì.
Eric Majerus,

17

Questo è ora supportato in Chrome dal pulsante "Pausa su tutte le eccezioni".

Per abilitarlo:

  • Vai alla scheda "Fonti" in Strumenti per sviluppatori di Chrome
  • Fai clic sul pulsante "Pausa" nella parte inferiore della finestra per passare a "Pausa su tutte le modalità eccezioni".

Si noti che questo pulsante ha più stati. Continua a fare clic sul pulsante per alternare

  • "Pausa su tutte le eccezioni": il pulsante è di colore azzurro
  • "Pausa su eccezioni non rilevate", il pulsante è colorato in viola .
  • "Non mettere in pausa le eccezioni": il pulsante è di colore grigio

1

Quasi ogni errore genererà eccezioni. Gli unici errori a cui riesco a pensare che non funzionerebbero con l'opzione "Pausa sulle eccezioni" sono gli errori di sintassi, che si verificano prima che uno qualsiasi del codice venga eseguito, quindi non c'è spazio per mettere in pausa comunque e nessuno del codice verrà eseguito.

Apparentemente, Chrome non si fermerà sull'eccezione se si trova all'interno di un blocco try-catch. Si ferma solo su eccezioni non rilevate. Non conosco alcun modo per cambiarlo.

Se hai solo bisogno di sapere su quale linea si è verificata l'eccezione (quindi puoi impostare un breakpoint se l'eccezione è riproducibile), l' Erroroggetto dato al blocco catch ha una stackproprietà che mostra dove si è verificata l'eccezione.


Matthew, ho "riprodotto" qualcosa di simile al caso che avevo (vedi la domanda aggiornata). In qualche modo, non riesco a interrompere il debugger su quell'errore. Hai idea del perché questo non funzionerebbe con Chrome (lo fa con Firebug quando si abilita "rompere tutti gli errori").
avernet,

@Mathhew, ho creato un'altra risposta dicendo che è impossibile e l'ho contrassegnata come risposta. Se tu o qualcun altro trovate una soluzione, cambierò il marker.
avernet,

1

Sfortunatamente, gli Strumenti per gli sviluppatori in Chrome sembrano non essere in grado di "interrompere tutti gli errori", come fa Firebug.


Basta fare clic sul pulsante Pausa UNA VOLTA (sarà di colore blu) e non contrassegnare l'opzione Pausa sulle eccezioni rilevate. Tutto sommato, farà una pausa solo in caso di errori.
Roy Shoa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.