2012-10-10 12 views
24

Quando si è nel ciclo infinito o nelle chiamate ricorsive, in pratica il browser smette di rispondere a qualsiasi cosa (su Chrome o FF). Non è possibile visualizzare i registri, non è possibile accedere al debugger, anche se non è possibile aprire la console stessa. Il browser semplicemente si blocca. Questo è così fastidioso. Sembra che non possa fare altro che sedermi qui a grattarmi la testa ... Chiunque può fare luce su come risolvere questo?Come eseguire il debug di javascript quando va in loop infiniti e chiamate ricorsive in Javascript?

+3

impostare un breakpoint nel debugger prima di avviare il ciclo? – PhonicUK

+0

@PhonicUK non funziona ..... – lkahtz

risposta

44

Un altro trucco che si potrebbe provare è di aprire gli strumenti di sviluppo Web in Chrome e provare a premere Pausa quando il browser si blocca apparentemente. Quindi dovrebbe interrompersi sulla linea in cui è attualmente in esecuzione. Con qualche passo fuori dovresti arrivare alla fine di questo.

Supponendo che si sa (o sospetto) la funzione in cui il ciclo infite accade è possibile aggiungere codice come questo:

var calls = 0; 
function iSuspectToBeLoopingInfititely() { 
    calls += 1; 
    if (calls > 100) { debugger; } 
} 

Questo fermerà il debugger JavaScript in Chrome una volta che il metodo è stato chiamato 100 volte. Nota: Chrome si interromperà solo per le chiamate debugger; se la finestra Strumenti sviluppatore è aperta.

+1

Grazie, @Tigraine. Funziona! – lkahtz

+2

Bella risposta. Non ho mai pensato di usare il pulsante 'pause' (aveva un bug difficile da riprodurre che causava un carico di CPU elevato) –

+2

Continuo a tornare a questa risposta. L'impostazione di orologi arbitrari su # di esecuzioni al secondo e l'interruzione di qualsiasi funzione che viola costituirebbe un'aggiunta eccellente agli strumenti di sviluppo del browser. – Barney

0

Avevo problemi con Chrome, vedevo nella finestra del browser 'Pausa nel debugger' ma non potevo vedere dove forse Chrome era confuso da quando era in loop ... In Firefox, ha riconosciuto che stava prendendo anche lungo e poi un popup si avvicina dopo 30 secondi a 1 minuto dicendo che il file e la linea generale # è congelato su cui aiuta a eseguire il debug di ulteriori e impostare i punti di interruzione intorno a quell'area.

-2

È possibile interrompere un ciclo infinito utilizzando il seguente codice.

debugger;

Problemi correlati