Lo hice y lo entendí

El blog de Vicente Navarro
02 oct

Gestionando crashes (errores) de Firefox con about:crashes

Aproximadamente desde que migré a Firefox 3 en Windows XP, venía sufriendo “crashes” aleatorios de Firefox antológicos. Me refiero a “crash” no a cuando el navegador se queda completamente colgado, sino a cuando se cierra completamente fruto de alguna excepción.

En esos casos, nos aparecerá el Mozilla Crash Reporter para solicitarnos permiso para enviar información sobre el crash a los servidores de la fundación Mozilla donde pueden estudiarlos y solucionar errores similares en posteriores revisiones:

Pues bien, decía que al principio los crashes parecían aleatorios, pero poco a poco me fue dando la sensación de que siempre aparecía en páginas que usaban el plugin de Java, pero no estaba seguro del todo. Hasta que no sé cómo, me enteré de la existencia del about:crashes, una página interna de Firefox que nos muestra un listado de los informes de errores que hemos mandado. Y yo tengo un buen montón:

Algunos de esos informes (probablemente los más viejos) ya habrán sido analizados por los servidores de Mozilla, pero otros aún están pendientes de analizar. Si hacemos click sobre ellos, los servidores darán prioridad al análisis de ese informe que hemos mandado y lo tendremos listo en unos minutos en crash-stats.mozilla.com:

¿Y qué podemos ver en esos informes? Pues un análisis del crash. Es fácil que lo que veamos nos suene a chino, pero siempre podemos obtener pistas. Por ejemplo, en mi caso todos los “Crash Reason” eran EXCEPTION_ACCESS_VIOLATION, que según Microsoft significa que (MINIDUMP_EXCEPTION Structure):

The thread tried to read from or write to a virtual address for which it does not have the appropriate access.

Vale, eso no nos sirve de gran cosa, pero si nos fijamos en el thread causante del crash, en todos mis casos, la DLL jpioji.dll está involucrada:

Por supuesto, esa librería es una de las que forma parte del plugin de Java. Y a continuación comprobé que, efectivamente, cada vez que cargaba páginas con Java, incluso con applets tan sencillos como los de Java Tester – What Version of Java Are You Using? o Installing Java – How do I test whether Java is working on my computer? obtenía un crash inmediato de Firefox.

Así que ya tenía claramente identificada la causa: el plugin de Java. ¿Cómo solucionar el problema? Probé a desinstalar y volver a instalar diferentes versiones del mismo sin ninguna mejora. Luego, creé un nuevo perfil de usuario (el gestor de perfiles se arranca con “firefox.exe -ProfileManager“) con la configuración estándar, sin ninguna personalización y vi que las páginas con Java ya no me colgaban el navegador y funcionaban correctamente. De modo que era algo de mis personalizaciones.

Comencé deshabilitando todas las extensiones sin éxito. Luego, hice una copia de seguridad del prefs.js de mi perfil y lo borré: vi que ahora volvía a funcionar el Java… ¡el problema lo creaba alguna de las opciones de configuración! Así que tuve la paciencia de ir probando a eliminar líneas hasta que los errores de Firefox desaparecieran al abrir páginas con Java. ¿Y sabéis cuál era la línea de configuración que causaba todos los problemas? Pues esta:

user_pref("general.useragent.override", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0 GoogleToolbarFF 3.1.20080605 GoogleToolbarFF 3.1.20080605");

general.useragent.override es el parámetro del about:config que nos permite modificar cómo Firefox se identifica a sí mismo. Normalmente dicho parámetro es nulo, por lo que el user agent es el de por defecto, pero parece que en mi caso, la GoogleToolbar había metido mano… ¡y dos veces! Si decidimos modificarlo en el about:config o en el prefs.js, es muy importante tener en cuenta que no es lo mismo que ese parámetro contenga una cadena vacía que ese parámetro no contenga ningún valor, que no se haya usado, que no exista. En el primer caso, nuestro “user agent” será eso, una cadena vacía. Nos identificaremos como “”. En el segundo, al no existir el parámetro, usará el valor de por defecto, que es lo que nos interesa.

En el about:config podemos identificar si el parámetro contiene un valor distinto al estándar porque está en negrita. Para resetearlo, podemos hacer click con el botón derecho sobre el parámetro y elegir Reset:

Si nos decidimos por modificar el prefs.js, es muy importante hacerlo con el navegador cerrado. De otra forma, al cerrarlo se sobreescribirán nuestros cambios. En este caso, eliminaríamos toda la línea, ya que dejar esto:

user_pref("general.useragent.override", "");

causaría el problema que comentamos: que el “user agent” sea una cadena vacía, y no el valor por defecto.

¿Y por qué este cambio en la identificación del usuario le causa tantos problemas al Java? Pues como siempre en estos casos, una vez que hemos encontrado el problema, resulta mucho más fácil encontrar páginas que hablen exactamente del mismo problema. Así, en Firefox, Java related problems, leemos que lo primero que hace el plugin de Java al arrancar es leer el “user agent” para saber cómo se tiene que comportar y, por ello, no debemos de modificarlo si queremos usar el plugin de Java:

At start up, the Java plugin depends on the user agent string, and Sun does not support modified user agent strings.

¡Fijaos si me ha dado trabajo la dichosa barra de Google! Si no fuera por su inestimable traductor…

:wq

Entradas relacionadas

4 Comentarios a “Gestionando crashes (errores) de Firefox con about:crashes”

  • ReiRok dice:

    Buen dato, para tener en cuenta.

    Hablando de traductores.
    Probaste el add-on llamado foxlingo, interesante y recomendable.
    Otra cosa, que es :wq , no se si te lo preguntaron antes.

    Saludos, ReiRok.

  • Osqui dice:

    Es el comando que se usa para guardar un documento y salir del editor de texto vi.

  • ReiRok dice:

    Muchas Gracias.

  • Anubys dice:

    Realmente bueno, tengo ese mismo problema en Firefox con xp(En linux funciona ok)asi que seguire tu metodo para analizar los crash.

    Un 10 para la informacion y el trabajo realizado.

Tema LHYLE09, creado por Vicente Navarro