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

Delphi Discussion :

Comment débuguer un Service ?


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Comment débuguer un Service ?
    Salut tout le monde,

    toute la question est dans le titre : Comment débuguer un service ?
    J'air regardé dans la FAQ et fais une recherche sur le forum et je n'ai rien trouvé.
    Apparement, ce n'est pas possible, mais je suis sûr qu'il y a un moyen de contourner le problème, mais je ne sais pas encore comment.

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Je n'ai pas (trop) de difficulté à déboguer mes services.
    Je désinstalle celui-ci et je le lance en mode install.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TMyService.ServiceCreate(Sender: TObject);
    var
      yes : BOOLEAN;
    begin
      if EnDebug then
        ServiceStart(Self,yes);
    end;
    EnDebug est un boolean perso

    P.S : je suis en D6

    a+

  3. #3
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci pour l'idée, j'essayais une autre approche.
    J'ai créé un autre projet classique, intégré les unités, copier/coller ce qui se trouvait dans le .dpr, changé une unité par Forms, mais c'est lourd.
    Ta solution est plus simple.

  4. #4
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    En fait, avec cette façon, on peut débuguer certaines fonctions, mais on ne peut pas lancer l'application, dès qu'elle passe le code Application.Run, elle s'arrête.

  5. #5
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    je mets mon point d'arrêt au plus près de ce que je veux déboguer.

    J'ai essayé d'epuré le code et ds l'exemple suivant je débogue mon timer qui scrute en attente ...

    Mon point d'arrêt est donc dans la méthode "TimerLectureTimer"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    procedure TMyService.ServiceCreate(Sender: TObject);
    begin
      try
      Session.TraceFlags := [tfqprepare..tfDataOut];
      {$IFDEF USE_IBOBJECT}
      DisplayName := 'MyService (IB natif)';
      {$ELSE}
      DisplayName := 'MyService (mode BDE)';
      {$ENDIF}
    
        if FindCmdLineSwitch('DEBUG',['-','/'] , true) then
          EnDebug := True;
      if EnDebug then
        ServiceStart(Self,yes);
      except
        on e:exception do
          showmessage(e.message);
      end;
    end;
    
    procedure TMyService.ServiceStart(Sender: TService; var Started: Boolean);
    begin
      try
        TimerLecture.Enabled  := True;
        if EnDebug then
          TimerLectureTimer(TimerLecture);
        Started := true;
      except
        on e:exception do
          showmessage(e.message);
      end;
    end;

    a+

  6. #6
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Je comprends bien ce que tu veux dire, mais dans mon cas, le Service fait office de serveur, les points d'arrêt doivent se mettre dans les méthodes lancées après connexion du client.

    En fait, c'est quand même faisable, je mets un point d'arrêt dans le ServiceStart, puis je lance et connecte mon client. Je mets un point d'arrêt dans la méthode et je continue le serveur jusqu'au second point d'arrêt.

    Quand même le fait qu'Application.Run termine le service n'est pas très pratique.

  7. #7
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 626
    Points : 2 481
    Points
    2 481
    Par défaut
    Je l'ai déjà fais mais je ne me rappelle plus exactement la manip:

    tu installes ton service et tu le démarres. En parallèle, tu places ton point d'arret dans ton code et tu fais Executer/Attacher au processus. Tu vas chercher ton service et tu l'attaches.

    Si tout va bien, ca devrait fonctionner...

    Si j'ai oublié un truc, que quelqu'un complète mon explication.

  8. #8
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    La méthode la plus simple que j'ai trouvé pour débugger les services est de logger les actions pour trouver ou ca plante...

    Avec un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure Log(mess : string);
    var
      tempName : string;
      f : textFile;
    begin
      tempName := IncludeTrailingPathDelimiter(ExtractFilePath(Paramstr(0))) + 'Nomdemonservice_' + FormatDateTime('mm', now) + '.log';
      assignfile(f, tempName);
      if not FileExists(TempName) then
        ReWrite(F)
      else
        append(f);
      writeln(f, DateTimeToStr(now) + ' : ' + mess);
      Flush(f);
      closeFile(f);
      mess := '';
    end;

  9. #9
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    En fait, en mettant ServiceStart dans le .dpr pour débuguer le chargement de l'application et utiliser la méthode de NoisetteProd en utilisant Exécuter > Attacher au processus pour débuguer le service lancé, cela permet de débuguer facilement les différents cas d'utilisation de façon simple.

    Je mets [Résolu], les solutions sont bonnes.
    Merci pour vos conseils.

  10. #10
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Pour info, j'ai trouvé dans l'aide de Delphi : Débogage d'applications service.
    Cela explique qu'il faut attacher le processus :
    Vous pouvez déboguer les applications service en attachant le processus de l'application service lors de son exécution (c'est-à-dire en commençant par démarrer le service puis en l'attachant au débogueur). Pour effectuer l'attachement au processus d'application service, choisissez Exécuter|Attacher au processus et sélectionnez l'application service dans la boîte de dialogue résultante.

  11. #11
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Citation Envoyé par WebPac
    Pour info, j'ai trouvé dans l'aide de Delphi : Débogage d'applications service.
    Cela explique qu'il faut attacher le processus :
    As-tu réussi à l'utiliser ?

  12. #12
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Oui ça marche, par contre, il faut que le service soit déjà installé et actif, mais ça marche bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment supprimer un service sous win XP?
    Par callo dans le forum Windows XP
    Réponses: 12
    Dernier message: 28/11/2011, 14h33
  2. comment lancer un Service ?
    Par beastman007 dans le forum Delphi
    Réponses: 4
    Dernier message: 15/12/2006, 10h30
  3. Comment gérer des services par programmation avec Delphi ?
    Par isachat666 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 18/12/2005, 18h54
  4. Comment faire un service interactif ?
    Par michelci dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 21/07/2005, 14h21
  5. [WinService][C#] Comment déployer un service windows ?
    Par sokette dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/04/2005, 16h38

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