Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Debug xpcom

Votre composant XPCom C++ ne se charge pas. Voici quelques opérations à effectuer pour tester votre composant:

  • Votre composant doit se trouver dans le répertoire components
  • Il doit aussi y avoir votre fichier .xpt
  • Après le dépos de vos fichiers .so (ou .dll), et .xpt, supprimez les fichiers xpti.dat et compreg.dat du profile créé (un .vendorName)
  • Dans votre nsModuleComponentInfo, en 5ème champ, rajouter une fonction du type:
 static NS_METHOD nsFoobarRegistrationProc(nsIComponentManager *aCompMgr,
                                          nsIFile *aPath,
                                          const char *registryLocation,
                                          const char *componentType,
                                          const nsModuleComponentInfo *info)
 {
    PR_fprintf(PR_STDOUT, "Composant Foobar chargé\n");
    return NS_OK;
 }
 static const nsModuleComponentInfo components[ ] =
 {
    { NSFOOBAR_CLASSNAME,
      NSFOOBAR_CID,
      NSFOOBAR_CONTRACTID,
      nsFoobarConstructor,
      nsFoobarRegistrationProc
    }
 };

Si au lancement de Firefox/XulRunner "Composant Foobar chargé" ne s'affiche pas, il y a un problème lors de l'enregistrement de votre bibliothèque (n'oubliez pas de faire un #include <nspr.h>). Dans ce cas:

  • Vérifiez que votre composant n'a pas de dépendances à d'autres bibliothèques non satisfaites, sous Linux:
 ldd xulapp/components/nsFoobar.so

Vous aurez des dépendances non satisfaites par rapport aux bibliothèques de Mozilla, ce qui est logique. Par contre, toutes autres dépendances non satisfaites posera problème. Vous pouvez préciser ou chercher les bibliothèques via la variable d'environnement LD_LIBRARY_PATH:

 LD_LIBRARY_PATH=/foobar/lib
  • Vérifiez qu'il n'y a pas de symboles non résolus. Vous pouvez lister la liste des symboles dont a besoin votre composant en faisant un:
 nm -g xulapp/components/nsFoobar.so

Les symboles recherchés sont précédés d'un U.

  • Une méthode plus radicale sous Linux:
 LD_PRELOAD=xulapp/components/nsFoobar.so ls

Tant que cette comande ne fait pas l'équivalent d'un ls, votre composant ne pourra pas fonctionner. Le linker ld chargera votre composant grâce à la variable d'environnement LD_PRELOAD.

Cette méthode est carrément moche !!! Je suis convaincu qu'il y a mieux ... à vous de jouer :)

  • N'hésitez pas à utiliser l'outil strace pour vérifier qu'il cherche bien votre composant.
  • Si vous compilez avec la SDK, évitez de prendre celle fournie par Mozilla, mais compilez là vous même (vous pourez l'obtenir en faisant un make -C xpinstall/packager).

Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.