2009-12-21 9 views
12

Ho ereditato una pila di codice che sta facendo cose inaspettate quando faccio clic su alcuni elementi <button>.Dicendo che Firebug si interrompe non appena viene eseguito qualsiasi Javascript

La pagina ha un sacco di Javascript e non è chiaro quali, se del caso, gli eventi sono stati impostati sul pulsante o sui suoi elementi principali. Sto cercando di trovare l'inizio dell'esecuzione in modo da poter eseguire il debug di ciò che sta accadendo.

C'è un modo per avere Firebug (o qualsiasi debugger Javascript) pausa ogni volta qualsiasi codice javascript viene eseguito? Forse in qualche modo per impostare un punto di interruzione su ogni riga a livello di codice? Oppure c'è un altro modo per scoprire a quale evento risponde il pulsante (pagina utenti boh Prototype, jQuery e alcuni JavaScript personalizzati.)

risposta

12

Basta premere il pulsante Pausa sul pannello firebug (a sinistra- angolo superiore di esso, due linee verticali gialle, quando è selezionata la scheda Script) - e si fermerà alla prima stringa JS.

Ma fermerà JS davvero in esecuzione a QUALSIASI evento - quindi se si ha un pulsante che cattura il movimento del mouse e il clic del mouse - non sarò in grado di fermarsi al clic del mouse, poiché lo script verrà fermato al movimento del mouse ogni volta si tenta di spostare il mouse su questo pulsante. Ti suggerisco di inserire alert() nelle posizioni sospette - dopo alcune iterazioni troverai esattamente la stringa che ti serve (dove si verifica l'errore).

+1

In alcuni casi è possibile aggirare il problema di spostamento/clic del mouse. Per un pulsante o qualsiasi altro elemento che può ricevere lo stato attivo, è possibile selezionare l'elemento e premere lo spazio o immettere per attivare l'evento click. –

+1

Hmmm, +1 per buone informazioni, anche se il clic su quel pulsante non sembra funzionare su questa particolare pagina (che, javascript saggio, è un po 'un disastro). Il pulsante fa la sua piccola cosa luminosa, ma l'attivazione di azioni javascript sulla pagina non dà una scossa al debugger. –

+0

Lo stesso problema qui. Non può fermarsi su: \t setTimeout (function() { \t \t window.location = '/ someBad/luogo' \t}, 0); –

1

Se si tratta di un problema di debug generico, è possibile utilizzare Web Inspector in Safari/Chrome. Un grande vantaggio è che si può buttare la seguente dichiarazione nel codice JavaScript per tirare sul debugger:

... 
debugger; // Will trigger the debugger 
... 

In caso contrario è possibile impostare punti di interruzione, i punti di interruzione condizionali, mettere in pausa alla successiva esecuzione, e tutti i soliti trucchi. Alcuni bei video sono disponibili here.

In risposta al suggerimento alert prima. Raccomanderei seriamente di usare console.log o console.dir se si ha accesso a un debugger. Otterrai maggiori informazioni senza bloccare l'esecuzione del tuo script. Inoltre, non dimenticare che lo console.log può assumere più parametri in modo da poter stampare bene i dati, non devi limitarti a una singola stringa come alert.

+0

Web Inspector non risolve questo problema. Il comportamento indesiderato non è un arresto in esecuzione. Il codice è in esecuzione correttamente, ma non fa ciò che vogliamo. Devo trovare il codice attivato dal clic. –

+0

Il mio commento è stato solo un rigurgito di quanto già affermato, solo con i vantaggi offerti da Web Inspector. Sto cercando di far notare che Firebug non è l'unica risposta. Se vuoi sapere cosa succede al click, dai un'occhiata ai listener di eventi per il nodo (e i genitori) di dove clicchi. Questo è disponibile nelle serate WebKit e l'estensione Eventbug menzionata per Firebug. –

2

Se si desidera vedere quali eventi sono impostati nella pagina, si potrebbe anche provare Eventbug.

3

Chiudere il browser Internet e aprirlo di nuovo. "Break on next" ricomincerà a funzionare. Altrimenti Firebug semplicemente ignora questa opzione dopo un po 'e non si interrompe, ma esegue javascript per tutti gli eventi senza avvertirti.

Problemi correlati