IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Programmation objet et debugger


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut Programmation objet et debugger
    Bonjour à tous,

    J'utilise un script perl test.pl qui va enchaîner une liste de traitement basé sur la manipulation d'objets rédigés sous forme de modules. Je souhaiterais debugger le dernier module écrit. Si je pars en pas à pas du script d'appel et que je descends dans les sous-routines, cela prend beaucoup trop de temps pour atteindre la partie du code qui m'intéresse. Lorsque j'y arrive le debugger m'indique que je suis à :

    Runtime::tomcat5::Server::doStart(/exploit/ISA/dev/scripts/lib/Runtime/tomcat5/Server.pm:137)

    Comment puis-je dans le debugger positionner directement un breakpoint à cet endroit pour m'y rendre directement ?

    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Il faut utiliser la fonction f du debugger pour ouvrir le fichier, puis tu places le breakpoint à la ligne souhaitée.
    Pour l'aide, tape h.

    L'usage du debugger est une bonne pratique

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut
    Merci pour ta réponse, ce que tu proposes semble convenir à mon besoin, mais je n'arrive pas à le faire.

    Dans ma version de debugger l'aide indique bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f filename  View source in file
    mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f  /exploit/ISA/sylvain/dev/scripts/lib/Runtime/tomcat5/Server.pm
    Le debugger me renvoie :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No file matching `/exploit/ISA/sylvain/dev/scripts/lib/Runtime/tomcat5/Server.pm' is loaded
    .

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Attention, filename est une regexp si le fichier fourni n'est pas trouvé dans %INC.

    Extrait de l'aide (perldoc perldebug):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
           f filename  Switch to viewing a different file or "eval" statement.  If
                       filename is not a full pathname found in the values of
                       %INC, it is considered a regex.
     
                       "eval"ed strings (when accessible) are considered to be
                       filenames: "f (eval 7)" and "f eval 7\b" access the body of
                       the 7th "eval"ed string (in the order of execution).  The
                       bodies of the currently executed "eval" and of "eval"ed
                       strings that define subroutines are saved and thus
                       accessible.
    Pour commencer, essaye f Server
    Si ce n'est pas suffisamment discriminant, essaye alors f tomcat5\/Server

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut
    En fait je pense que le problème vient du fait que ma classe n'a pas encore été chargée, de fait, même un f tomcat5 ne fonctionne pas.

    En revanche j'arrive au résultat souhaité en faisant :
    b load /exploit/ISA/sylvain/dev/scripts/lib/Runtime/tomcat5/Server.pm

    Je laisse le script se dérouler avec "c", puis le debugger me rend la main au chargement de la classe, je peux alors positionner un breakpoint sur une ligne, puis je laisse de nouveau le script se dérouler et il s'arrête effectivement sur la ligne demandée de ma classe.

    Que penses tu de cette méthode ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je ne connaissais pas cette technique, mais il est assez rare qu'un module déclaré avec "use" ne soit pas chargé lorsque le debugger rend la main au démarrage (il faut avec fait un eval { use ... } il me semble, et encore, je n'en suis pas sur).

    Il y a peut-être une autre méthode:
    Après avoir lancé perl -d, tu tapes use tomcat5::Server (le nom complet du module) afin de forcer le chargement du module. Tu peux alors utilise f.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut
    En fait le module en question n'est pas chargé par le script d'entrée mais pas une des classes appelée dans le traitement. De plus le nom de cette classe est dynamique et est donc chargé par un require et non pas par un use.

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par MyGoul Voir le message
    De plus le nom de cette classe est dynamique et est donc chargé par un require et non pas par un use.
    Ceci explique cela, car même appelé dans une sous-classe (à l'aide de use), la classe est toujours chargée au démarrage du débugger.
    Mais c'est vrai qu'avec require, c'est différent.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Par défaut
    Juste au passage. Avec eclipse et le module EPIC, on peut déboguer en mode graphique. On va sur le module, on pose un breakpoint avec un clic droit. On voit les valeurs de variables.
    Dingue, non ?

Discussions similaires

  1. [Débuter] Programmation objet mais conditions particulières
    Par KaptainouK dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 30/09/2005, 00h20
  2. [Débutant(e)][Conception] prob de programmation objet
    Par gregorian dans le forum Général Java
    Réponses: 3
    Dernier message: 07/07/2005, 11h20
  3. Questions sur la programmation objet en Delphi
    Par Manopower dans le forum Débuter
    Réponses: 20
    Dernier message: 15/06/2005, 15h39
  4. [ASP] Programmation objet ?
    Par Hell dans le forum ASP
    Réponses: 6
    Dernier message: 07/04/2005, 15h28
  5. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo