nueva versión SWF Tracer
Escrito el 13/04/2004 por Xavi Beumala
La verdad es que ayer cuando colgué la primera versión del SWFTracer ni yo mismo me creía que hoy publicaría una nueva versión... Pero he leido un post de Gregg Wygonik que ha permitido aumentar sustancialmente las prestaciones de la aplicación.
Los posts a los que me refiero son:
- logging Flash trace() output to a text file - thanks Flex docs!
- the coolness of tracing to a file - no more silently failing Flash apps!
- AFTERTHOUGHT - a free Flash debug log file tool
En resumidas cuentas resulta que el Flash Player en su distribución Debugger (flash player 7) incorpora una opción de depuración sólo documentada para Flex. Esta opción captura de forma asombrosa un sinfín de parámetros imperceptibles desde el debugger y compilador del IDE de Flash. Esta opción loggea todo tipo de warnings como errores en mayúsculas/minúsculas, llamadas a métodos inexistentes, referencias a objetos erroneas y un larguísimo etcétera.
Ahora la pregunta es cómo activar esta opción y cómo empezar a sacar provecho de ello. El procedimiento que planteo es el mismo que explica Gregg Wygonik en este post:
- Hacer click en Mi PC con el botón derecho y seleccionar propiedades.
- Clicar la pestaña Opciones Avanzadas.
- Tenemos que añadir dos variables de entorno de usuario: HOMEDRIVE con el valor 'c:/' (sin las comillas) y HOMEPATH con el valor C:\Documents and Settings\
(sustituyendo el nombre de usuario por el vuestro). - Ahora tenemos que ir a la carpeta C:\Documents and Settings\
y añadir un archivo con nombre mm.cfg. De hecho la ruta de este archivo corresponde con el valor de la variable de entorno HOMEPATH que acabamos de declarar. - En este archivo añadimos las siguientes lineas:
ErrorReportingEnable=1
TraceOutputFileEnable=1
TraceOutputFileName=C:\flashlog.txt
MaxWarnings=0
- Quien quiera más información sobre estos parámetros se puede referir a la documentación de Flex.
- Ahora lo que tenemos que hacer es instalar el flash player versión debugger. Pero primero tenemos que desinstalar el player que tengamos instalado. Para ello tenemos que descargar el desinstalador de la web de Macromedia.
- Una vez desinstalado vamos a la carpeta C:\Archivos de programa\Macromedia\Flash MX 2004\Players\Debug y ejecutamos el archivo Install_Flash_Player_7AX.exe. Este nos instalará la versión debugger.
- Para ver que realmente se ha instalado bién tenemos que abrir un swf en el navegador y pulsar con el botón derecho sobre él. Si todo ha ido bién tendríamos que ver una opción desactivada que dice: 'Depurador'. Si no es así tenemos que repetir los pasos anteriores.
- Ahora lo único que queda es probar lo que hemos hecho y ver donde queda todo registrado.
- Creamos un nuevo fla desde Flash MX 2004 con el siguiente código:
xX = 0;
trace(Xx);
trace(xX);
- Lo publicamos y lo abrimos con el explorer.
- Si todo ha ido bién ahora en c:/ encontraremos un archivo llamado flashlog.txt. Este archivo se encuentra en la ruta definida por la variable de entorno HOMEDRIVE que hemos definido antes. El archivo contiene lo siguiente:
Advertencia: referencia a variable no declarada, 'y'
-- Probablemente no coinciden las mayúsculas y minúsculas.
undefined
0
¡Pues esta es la maravilla! Si lo probáis con algún swf más complejo veréis la potencia de esta funcionalidad. La verdad es que estoy seguro que esto nos ayudará a disminuir los tiempos de testeo y de búsqueda de bugs en nuestras aplicaciones!

Pues ahora al tema de este post: la nueva versión de SWF Tracer. Lo que he hecho es añadir una nueva rama al árbol a través de la cual se puede visualizar el contenido del archivo flashlog.txt. En la parte inferior he añadido una caja de texto en la que tenemos que escribir la ruta y el nombre del archivo flashlog.txt para que la aplicación lo pueda encontrar. El botón 'Save' permite salvar de forma permanente esta ruta (a través de un sharedObject). Otra opción añadida es el numericStepper, lo que permite es indicar el número de segundos que tienen que transcurrir entre lectura y lectura del archivo en cuestión. Si no queremos que se autoactualize basta con ponerle un 0. Si pulsamos en 'save' se recargará de forma inmediata.
Espero ir mejorando todo esto, y sobretodo refactorizar el código ya que lo he escrito bastante rápido y no estoy muy satisfecho de él :P.
Espero que os sirva de ayuda y que los disfrutéis!