2010-03-18 11 views
7

Tengo una página que tiene una cantidad bizantina de código JavaScript ejecutándose. Solo en Internet Explorer, y solo en la versión 8, recibo una advertencia de script largo que puedo reproducir confiablemente. Sospecho que los manejadores de eventos se disparan en un ciclo infinito.¿Puedo obtener el depurador de Internet Explorer para romper el código JavaScript de larga ejecución?

Las herramientas de desarrollador están cojeando horriblemente bajo el peso del script en ejecución, pero parece que soy capaz de hacer que el registro me diga qué línea de script estaba ejecutando cuando aborté, pero es inevitable que algunas de las fontanería profunda del código ExtJS que usamos, y no puedo decir dónde está en mi pila de código.

Una forma de ver la pila de llamadas funcionaría, pero preferiblemente me gustaría poder entrar en el depurador cuando recibo la advertencia de guión largo para poder pasar por la pila.

Hay una pregunta similar publicada, pero las respuestas fueron para una herramienta incorrecta, o el consejo no demasiado útil para eliminar la mitad de mi código a la vez en una búsqueda binaria para el bucle infinito. Si mi código fuera lo suficientemente simple como para hacer eso, probablemente no habría obtenido el ciclo infinito en primer lugar. Si pudiera reproducir el problema en Firebug, probablemente sería mucho más feliz también.

Respuesta

0

He intentado esto antes y he tenido un poco de suerte al habilitar las herramientas de desarrollador junto con Visual Studio. Cuando se encuentra un error, la carga de la página se detiene y puedo cargar Visual Studio para ver la línea específica que causa el problema.

Este sitio tiene alguna información sobre el uso de Visual Studio junto con el depurador de Internet   Explorer: Using Visual Studio to Debug JavaScript in IE

3

Esto es lo que haría:

  1. Ir a http://www.microsoft.com/whdc/devtools/debugging/default.mspx e instalar las herramientas de depuración para ventanas. Desea ejecutar WinDBG cuando está instalado.

  2. Siga los pasos descritos en http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a para configurar la conexión del servidor de símbolos y haga que los símbolos se descarguen automáticamente a su unidad local (c: \ websymbols - o lo que sea).

  3. Ejecute IEXPLORE.EXE en WinDBG. El archivo de ayuda debe brindarle ayuda para hacerlo si es necesario. Necesitas un par de comandos una vez que ejecutas Internet Explorer y tal. Primero, adelante y obtenga ese gran script en marcha.

  4. Entre en el depurador (CTRL-DESPLOME para romper).
    a. Haga un LN para "listar más cercano" para obtener los archivos DLL que se cargan. Con suerte, tendrá JSCRIPT.DLL cargado en la memoria.
    b. Escriba .reload /f para forzar la recarga de todos los símbolos. Esto tomará un rato. Ahora, una vez hecho esto, escriba LN de nuevo y verá que se ha descargado el JSCRIPT.PDB correcto en su sistema en el directorio de símbolos que configuró anteriormente.

  5. Dependiendo de lo que desee hacer, es posible que tenga que reiniciar el depurador, pero puede hacerlo: después del corte inicial en la carga de WINDBG, puede escribir "sxe ld jscript.dll" y se romperá cuando jscript.dll cargas.

  6. Esta es la parte difícil, porque una vez que esta carga, usted no tiene el código para jscript.dll, pero usted tiene los símbolos apropiados (si es que no se cargan, a continuación, volver a cargarlos con .reload /f). Puede ver las funciones disponibles escribiendo "x! Jscript" y obtendrá una lista completa de todas las funciones y variables.

  7. Elija uno, establezca un punto de inflexión, y luego debería ser capaz de rastrear lo que está sucediendo en su secuencia de comandos.

  8. Si no se logra nada más, al usar .reload /f process, puede obtener los archivos jscript.pdb apropiados cargados en su sistema. Es posible que pueda usarlos junto con Visual Studio para realizar una depuración adicional de esa manera, pero no estoy seguro de qué tan bien funcionará.

Cuestiones relacionadas