La depuración de extensiones de Firefox - ¿Cómo puedo ver todos los JS y XUL archivos contenidos en el XPI?

StackOverflow https://stackoverflow.com//questions/24054407

Pregunta

Estoy tratando de depurar una extensión de Firefox, el uso de Firefox 28.0.

He configurado el entorno dev como se sugiere en https://developer.mozilla.org/en-US/Add-ons/Setting_up_extension_development_environment (en realidad, yo sólo tomó el camino del perezoso e instalado el DevPrefs extensión para establecer todo lo necesario acerca de:configs)

A continuación, abro Firefox y entrar en el entorno de depuración (Herramientas > Desarrollador Web > Browser caja de herramientas).

Yo, a continuación, vaya al Depurador ficha.

Sin embargo, en el panel Fuentes, bajo mi extensión (por ejemplo,chrome://myextension), solo puedo ver algunos de los JS y XUL archivos que están contenidos en mi extensión XPI.

¿Cómo puedo manualmente "carga de archivos" en el depurador, para que yo pueda establecer un punto de interrupción y traza el tiempo de ejecución de mi extensión?

¿Fue útil?

Solución

El depurador no tiene ninguna funcionalidad que permita la carga de archivos "manualmente", sino que le muestra todos los archivos que se cargan actualmente por el motor de JavaScript.Si cavar en los detalles, esto significa que cada vez que el motor de JavaScript compila una nueva secuencia de comandos del depurador es notificado y se le agrega el archivo correspondiente a su lista.Así que, normalmente, todo lo que necesitas hacer es abrir una página o cuadro de diálogo que utiliza la secuencia de comandos y se hará visible en el depurador.Digo "normalmente" porque en mis pruebas, esto no parece funcionar de forma fiable - no parece ser un bug que hace que el depurador pierdas algunas secuencias de comandos, tal vez eso es lo que impulsó a su pregunta.

Ahora, por supuesto, usted puede considerar la posibilidad de simular la notificación a la fuerza el depurador para cargar un archivo en particular - por ejemplo,si desea establecer puntos de interrupción antes de que el archivo de carga.Lo he probado y de hecho, es posible, pero requiere de usted para meterse con Firefox internos y se basa en una serie de detalles de implementación que podría cambiar en futuras versiones de Firefox.En particular, usted necesita para obtener la DebuggerServer ejemplo utiliza para comunicarse con el depurador.Mientras que el proceso depurador siempre utiliza la misma instancia que es trivial para obtener una nueva instancia es creada para cada depurador remoto.Por lo que puedo decir, llegar a esa instancia sólo es posible con los cambios implementados en error 993029 lo que significa que sólo funciona con Firefox 32 (actualmente disponible desde el Firefox Aurora canal y encima.

El problema es que la DebuggerServer la instancia está siendo creado por el BrowserToolboxProcess clase declarada en ToolboxProcess.jsm.Antes de los cambios introducidos por error 993029 un BrowserToolboxProcess objeto se crea y no se hace referencia a ella mantuvo el sentido de que sería imposible acceder a ella y la conexión correspondiente después del hecho.Empezando con Firefox 32, todos creados BrowserToolboxProcess los objetos se almacenan en el processes conjunto y pueden ser enumerados.

Este código puede ser utilizado para simular una Depurador.onNewScript() la llamada que se enviará al depurador remoto:

(function()
{
  // Iterate over existing processes
  const {processes} = Cu.import("resource:///modules/devtools/ToolboxProcess.jsm", null);
  for (var process of processes)
  {
    // Iterate over connections associated with each process
    var debuggerServer = process.debuggerServer;
    for (var connID in debuggerServer._connections)
    {
      if (!debuggerServer._connections.hasOwnProperty(connID))
        continue;
      var conn = debuggerServer._connections[connID];

      // Get ChromeDebuggerActor instance for the connection
      var chromeDebugger = conn._getOrCreateActor(conn.rootActor._extraActors.chromeDebugger.actorID);

      // Fake new script call
      chromeDebugger.onNewScript({
        url: "chrome://myextension/content/script.js", // CHANGE THAT LINE
        source: {text:""},
        getChildScripts: () => []
      });
    }
  }
})();

Como se mencionó anteriormente, este código sólo debería de empezar a trabajar con Firefox 32, he probado en Firefox 33.0a1.Se puede ejecutar desde el bloc de notas, asegúrese de interruptor de medio ambiente para "Navegador".No hay garantía alguna de que se continuará trabajando en las futuras versiones de Firefox, hay varios detalles de implementación utilizada aquí, que puede cambiar en cualquier momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top