2010-03-18 11 views
7

Ho una pagina che contiene una quantità di codice JavaScript bizantina. Solo in Internet Explorer, e solo nella versione 8, viene visualizzato un avviso per script lunghi che posso riprodurre in modo affidabile. Sospetto che i gestori di eventi si inneschino in un ciclo infinito.È possibile ottenere il debugger di Internet Explorer per entrare nel codice JavaScript di lunga durata?

Gli strumenti di sviluppo stanno zoppicando orribilmente sotto il peso dello script in esecuzione, ma mi sembra di essere in grado di ottenere il registro per dirmi quale linea di script era in esecuzione quando ho abortito, ma è inevitabilmente una parte del impianti idraulici profondi del codice ExtJS che usiamo e non posso dire dove si trova nella mia pila di codice.

Un modo di vedere lo stack di chiamate funzionerebbe, ma preferibilmente sarei in grado di entrare nel debugger solo quando avrò l'avviso di script lungo così posso solo passare attraverso lo stack.

C'è una domanda simile, ma le risposte fornite erano per uno strumento non giusto, o il consiglio non terribilmente utile per eliminare metà del mio codice alla volta in una caccia binario per il ciclo infinito. Se il mio codice fosse abbastanza semplice da poterlo fare, probabilmente non avrebbe ottenuto il ciclo infinito in primo luogo. Se potessi riprodurre il problema in Firebug, probabilmente sarei anche molto più felice.

risposta

0

Mi sono già imbattuto in questo e ho avuto fortuna nell'abilitare gli strumenti di sviluppo insieme a Visual Studio. Quando si verifica un errore, il caricamento della pagina viene interrotto e quindi posso caricare Visual Studio per vedere la linea specifica che causa il problema.

Questo sito ha alcune informazioni sull'utilizzo di Visual Studio con il debugger Internet   Explorer: Using Visual Studio to Debug JavaScript in IE

3

Qui è quello che vorrei fare:

  1. Vai a http://www.microsoft.com/whdc/devtools/debugging/default.mspx e installare gli strumenti di debug per Windows. Si desidera eseguire WinDBG quando questo è installato.

  2. Seguire i passaggi indicati a http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a per impostare la connessione del server di simboli e far scaricare automaticamente i simboli nell'unità locale (c: \ simboli Web - o qualsiasi altra cosa).

  3. Eseguire IEXPLORE.EXE in WinDBG. Il file di aiuto dovrebbe darti assistenza in questo caso se necessario. Hai bisogno di un paio di comandi una volta che Internet Explorer è in esecuzione e così via. In primo luogo, andare avanti e ottenere che script di grandi dimensioni in corso.

  4. Interruzione nel debugger (CTRL-SCROLLLOCK per interrompere).
    a. Fare un LN in "elenco più vicino" per ottenere i file DLL che vengono caricati. Si spera che JSCRIPT.DLL sia caricato in memoria.
    b. Digitare .reload /f per forzare il ricaricamento di tutti i simboli. Questo richiederà un po 'di tempo. A questo punto, digitare nuovamente LN e il file JSCRIPT.PDB corretto è stato scaricato nel sistema nella directory dei simboli impostata precedentemente.

  5. A seconda di ciò che si vuole fare, potrebbe essere necessario riavviare il debugger, ma è possibile farlo: Dopo l'interruzione iniziale su WINDBG, è possibile digitare "sxe ld jscript.dll" e si interromperà quando Carichi jscript.dll.

  6. Questa è la parte difficile, perché una volta che questi carichi, non avete il codice per jscript.dll, ma avete i simboli corretti (se non sono caricati, poi ricaricarli con .reload /f). È possibile visualizzare le funzioni disponibili digitando "x! JScript" e si otterrà un elenco completo di tutte le funzioni e variabili.

  7. Scegli uno, impostare un punto di rottura, e quindi si dovrebbe essere in grado di tenere traccia di ciò che sta accadendo al vostro script.

  8. Se non si ottiene altro, utilizzando .reload /f process, è possibile ottenere i file jscript.pdb appropriati caricati sul sistema. E 'possibile che si potrebbe usare questi in combinazione con Visual Studio per fare ulteriore debug in quel modo, ma io non sono così sicuro quanto bene che funzionerà.

Problemi correlati