2012-03-11 5 views
6

La mia applicazione contiene un bug, che rende lo script eseguito infinitamente lungo. Quando impongo il blocco dello script, tutti gli elementi dell'interfaccia utente di jQuery non rispondono alle mie azioni, né le risposte dell'applicazione ai tasti premuti.Come trovare un bug raro?

Se scelgo di aprire Firebug, è necessario ricaricare la pagina e tutto lo stato dell'applicazione corrente va perso.

La cosa è che non riesco a riprodurre questo bug ed è un po 'mi sta facendo impazzire. Come trovare e correggere questo bug slick?

AGGIORNAMENTO. Grazie a tutti per il consiglio. Ma il problema è che non riesco a capire quando si verifica un errore e, quindi, non riesco a riprodurlo. Ecco perché le procedure standard non funzioneranno nel mio caso.

Ho esaminato il ciclo while e le chiamate a funzioni ricorsive, ma non ho ancora capito il problema.

Pubblicare il codice non è una buona idea - l'elenco dei codici è enorme e piuttosto complicato (un gioco).

SOLUZIONE POSSIBILE. Seguirò uno dei suggerimenti pubblicati e proverò a consolarizzare tutte le funzioni che potrebbero causare il problema. Spero che sia d'aiuto.

+2

Potresti pubblicare il tuo codice? –

+2

+1. Troppe domande richiedono semplicemente la soluzione al problema anziché il debug. – maxedison

+2

si prega di fornire un http://sscce.org/ :) –

risposta

0

Infinite molto tempo, significa,

penso che qualche funzione viene sempre chiamato in modo ricorsivo o di qualche evento è essere stato licenziato in modo ricorsivo. Per rintracciarlo,

  1. Prova a mettere console.log in tutte le funzioni, che sono sempre chiamati da window.onload o document.ready (se si utilizza jQuery).
  2. Usa Firebug's profile, che ti dirà ogni chiamata di funzione che sta accadendo.
+0

'Profile' si bloccherà con loop infinito/ricorsione e difficilmente aiuterà. – kirilloid

6

ci sono due approcci principali per affrontare questo:

  1. Set break points e passo attraverso il codice
  2. Inizio commentando alcune sezioni di codice. Dopo aver commentato una sezione che elimina il bug, inizia a commentare i pezzi più piccoli di quella sezione finché non arrivi alla riga di codice che causa il problema.

Potrebbe anche aiutare a sapere cosa stai cercando. Uno script infinitamente funzionante generalmente deriva da una di queste due cose:

  1. Un ciclo che non termina mai.
  2. Una funzione che si

chiama Tenere d'occhio per queste cose potrebbero aiutare il processo di debug andare un po 'più velocemente. In bocca al lupo!

+0

Come impostare i breakpoint e scorrere il codice senza aprire Firebug e ricaricare la pagina? –

+0

A meno che la pagina non si blocchi per prima cosa al caricamento. Si carica la pagina, si impostano i punti di interruzione, quindi si aggiornano e si analizzano le azioni che portano al comportamento del buggy. – kontur

+0

Come detto @kontur, si imposta i punti di interruzione * prima * si inizia a interagire con la pagina (immediatamente dopo il caricamento della pagina). – maxedison

2
  • rompere il codice in blocchi e determinare quale causa l'errore. ad esempio, se si dispone di un modulo con diversi campi che dispongono di selezione data e completamento automatico, separarli uno per uno. zero-in su chi lo causa.

  • utilizzare la linea temporale del debugger. naviga intorno al tuo sito con la timeline che registra il rendimento della tua pagina. nella timeline vedrai quale compito impiegherà troppo tempo. il browser potrebbe bloccarsi quando trovi il bug, ma almeno vedrai cosa è successo quando.

  • prova a ricreare le tue azioni. fai una lista di controllo dettagliata su come navigare. in questo modo, puoi tracciare nel codice il possibile percorso che il tuo script ha preso quando hai fatto la tua mossa. se solo JS avesse un back-trace come PHP, sarebbe più semplice.

  • provare a rivedere il codice.cose come loop, ricorsioni o anche due funzioni che si chiamano possono causare questo loop infinito.

  • se possibile, utilizzare uno strumento VCS come SVN o GIT. puoi facilmente costruire n 'break your code senza la preoccupazione di perdere una versione funzionante. puoi tornare facilmente se usi VCS.

0

Cerco sempre le funzioni che potrebbero essere chiamate troppo spesso o cicli che non interrompono mai il ciclo. Quindi, tieni traccia di quante volte vengono eseguite le tue funzioni/loop sospetti. Esempio:

var runCount = 0; 
    function guiltyLookingFunction(params) 
    { 
     runCount++; //increase by 1 every time this function runs 
     if (runCount>1000) //if this has run some insane number of times 
      alert("this function is the that's running wild!"); 

     //the rest of your function's code 

     //same thing with loops within functions: 
     var loopCount = 0; 
     while (0!=1) //this will always be true, so the loop won't stop! 
     { 
      loopCount++; 
      if (loopCount>1000) 
       alert("this loop is to blame!"); 

      //the rest of your loop 
     } 
    } 

(sostituire "la funzione/loop" con un po 'identificativo specifico se si sta monitorando più sospetti)

0

A) Usa WebKit (Safari, Chrome, Chromium) ispettore invece di Firebug - No più ricarica, yay!

B) Impostare alcuni output di debug lungo il percorso che consentano di restringere il problema all'autore del reato.

0

Firebug. Ricaricamento? Non hai provato ad aprire Firebug prima del caricamento della pagina?