2010-09-06 5 views
4

Pouvez-vous décrire les étapes de débogage de Perl XS dll sous Windows. Un débogueur de l'interface utilisateur comme Windbg est préféré. Je veux pouvoir définir le point d'arrêt sur les routines dans la DLL et examiner la pile etc.Comment faire pour déboguer le code Perl XS sur Windows

J'ai la version de débogage de perl sur ma boîte.

Répondre

3

Vous pouvez essayer de faire ce que j'ai fait sous * NIX une fois.

Vérifiez le .c généré à partir de votre .xs, notez le nom de la fonction xsubpp a donné votre fonction. Ouvrez le Perl dans le débogueur et définissez le point d'arrêt à la fonction avec le nom. Le débogueur se plaindrait que le symbole n'est pas encore visible et que le point d'arrêt serait résolu lors du chargement des bibliothèques partagées. Maintenant, essayez d'exécuter le Perl avec votre script en tant que paramètre. Si tout cela fonctionne, alors le débogueur résoudrait correctement le nom du symbole lorsque XS est chargé par Perl.

Dans certains débogueurs, il existe des problèmes avec ces symboles résolus ultérieurement. Contournement consiste à ajouter dans le script après use your::custom::xs; un appel à un système rare ou un appel de bibliothèque standard (j'utilise souvent le getpid()). Définissez le point d'arrêt sur la fonction rare. Démarrez Perl et attendez qu'il arrive au point d'arrêt lors de l'appel rare. Votre XS devrait déjà être chargé et ses symboles visibles pour le débogueur. Définissez le point d'arrêt sur la (les) fonction (s) que vous souhaitez déboguer.

Sinon, sachez que vous ne devez pas mettre trop de logique dans le XS. XS est destiné à n'être qu'une couche de colle et doit donc rester mince. Si l'utilisation de votre XS nécessite une logique supplémentaire, mettez-la dans le .pm qui aurait déjà été généré automatiquement par le h2xs pour votre XS dans le sous-répertoire lib/.

Espérons que ça aide.

3

Dépend beaucoup de la DLL, donc je ne peux donner que le conseil général: mettre une pause sur Perl_pp_entersub, puis avancer. La DLL doit également avoir des symboles de débogage, si vous avez utilisé la chaîne d'outils habituelle, cela a été pris en charge automatiquement.

Pour examiner la pile comme Perl la voit, réutilisez Reini's gdb macros pour votre débogueur.

Questions connexes