Débogage extension Firefox - Comment faire pour voir tous les JS et les fichiers XUL contenues dans le XPI?

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

Question

Je suis en train de déboguer une extension de Firefox, en utilisant Firefox 28.0.

J'ai mis en place l'environnement de dev comme suggéré dans https://developer.mozilla.org/en-US/Add-ons/Setting_up_extension_development_environment (en fait j'ai juste pris le paresseux et installé le DevPrefs extension à l'ensemble de tous les services nécessaires sur:configs)

Je puis ouvrez Firefox et allez dans l'environnement de débogage (Outils > Développeur Web > boîte à outils du Navigateur).

Je puis aller à la Débogueur onglet.

Cependant, selon les Sources volet, en vertu de mon extension (par ex.chrome://myextension), je ne vois certains de la JS et XUL fichiers qui sont contenus dans mon extension XPI.

Comment puis-je manuellement "charger des fichiers" dans le débogueur, de sorte que je peux définir un point d'arrêt et la trace de l'exécution de mon poste?

Était-ce utile?

La solution

Le débogueur ne dispose pas de la fonctionnalité qui permettrait de chargement des fichiers "à la main", au lieu de cela, il va vous montrer tous les fichiers que est actuellement chargé par le moteur JavaScript.Si vous creusez dans les détails, cela signifie que chaque fois que le moteur JavaScript compile un nouveau script le débogueur est notifié et ajoute le fichier correspondant à sa liste.Donc, normalement, tout ce que vous devez faire est d'ouvrir une page ou une boîte de dialogue qui utilise ce script et il deviendra visible dans le débogueur.Je dis "normalement", parce que, dans mes tests, cela ne semble pas fonctionner de manière fiable -, il semble que certains bug qui fait que le débogueur de manquer certains scripts, peut-être que c'est ce qui a motivé votre question.

Maintenant, bien sûr, vous pouvez envisager de simuler la notification de forcer le débogueur pour charger un fichier particulier - par exemple,si vous souhaitez définir des points d'arrêt avant que le fichier ne se charge.Je l'ai essayé et il est en effet possible, mais il vous oblige à jouer avec Firefox internes, et s'appuie sur un certain nombre de détails de mise en œuvre qui peut changer dans les futures versions de Firefox.En particulier, vous avez besoin pour obtenir le DebuggerServer exemple utilisées pour communiquer avec le débogueur.Alors que le processus de débogueur utilise toujours la même instance qui est facile à obtenir, une nouvelle instance est créée pour chaque débogueur distant.À partir de ce que je peux dire, arriver à cette instance n'est possible qu'avec les changements mis en œuvre dans bug 993029 ce qui signifie qu'il ne fonctionne qu'avec Firefox 32 (actuellement disponible à partir du Firefox Aurora canal) et au-dessus.

Le problème est que l' DebuggerServer l'instance est en cours de création par l' BrowserToolboxProcess classe déclarée dans ToolboxProcess.jsm.Avant les modifications introduites par le bogue 993029 un BrowserToolboxProcess l'objet sera créé et aucune référence gardé ce qui signifie qu'il serait impossible d'y accéder et de la connexion correspondante après le fait.À partir de Firefox 32 tous créés BrowserToolboxProcess les objets sont stockés dans le processes ensemble et peut être énumérés.

Ce code peut être utilisé pour simuler une Débogueur.onNewScript() appel qui sera transmis à la débogueur distant:

(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: () => []
      });
    }
  }
})();

Comme mentionné ci-dessus, le présent code ne doit travailler à partir de Firefox 32, je l'ai testé sur Firefox 33.0a1.Vous pouvez l'exécuter à partir du Bloc-notes, assurez-vous de commutateur environnement "Navigateur".Il n'y a aucune garantie qu'il va continuer à travailler dans de futures versions de Firefox, il y a plusieurs détails de mise en œuvre utilisée ici, qui peut changer à tout moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top