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

API, COM et SDKs Delphi Discussion :

[API] Codage d'un moniteur de messages debug


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut [API] Codage d'un moniteur de messages debug
    Je voudrais coder une application me permettant de recevoir les messages envoyés par OutputDebugString. Je pensais utiliser WaitForDebugEvent mais ça n'a pas l'air de trop marcher, à moins que je m'y prenne mal. Alors si quelq'un a une idée...

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    J'ai trouvé ca :

    http://xxx

    [Edit]
    Après visite plus poussé de ce site, je préfère enlever l'adresse (ca parle de crack en fait). Je prepare un bout de code qui illustre l'exemple en C trouvé.
    [/Edit]

    Il y a un exemple en C.

    Je ne sais pas si ca peut t'aider, mais je ne pense pas qu'il soit possible de monitorer les évènement de débug dans l'application en débuggage. WaitForDebugEvent ne semble fonctionner qu'avec des process créés ou attachés. Je n'ai pas testé la solution proposé sur cette page.

    En tout cas, la question est intéréssante, je ne savais pas que de telle APIs existaient, et ca me donne des idées !

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bon voila, avec ca on récupère bien les évènement de débug :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    procedure Run;
    var
      vRcProcessInfo : PROCESS_INFORMATION;
      vRcStartUpInfo : STARTUPINFO;
      vRcDbgEvt : DEBUG_EVENT;
    begin
      if ((FStProcess <> '') and
          (FileExists(FStProcess))) then
      begin
     
        // Création du process à débugger		
     
        if (CreateProcess(PChar(FStProcess), nil, nil, nil, False,
                                 DEBUG_ONLY_THIS_PROCESS,
                                 nil, nil, vRcStartUpInfo, vRcProcessInfo)) then
        begin
          FStLastOutPut := '';
          FBoRunning := True;
          while (FBoRunning) do
          begin
     
            // On attend un évènement de débug
     
            if (WaitForDebugEvent(vRcDbgEvt, 150)) then
            begin
     
              // Traitement des différents évènements
     
              case vRcDbgEvt.dwDebugEventCode of
     
                { Evènement correspondant à un OutputDebugString 
                   On ne récupère pas directement la valeur passée dans le 
                   dans vRcDbgEvt.DebugString.lpDebugStringData, à priori 
                   il faut passer 
                   par un ReadProcessMemory (pas testé). }
     
                OUTPUT_DEBUG_STRING_EVENT :  
                  FStLastOutput := 'OUTPUT_DEBUG_STRING_EVENT : ' + 		                       vRcDbgEvt.DebugString.lpDebugStringData;
     
                // Autres cas : voir MSDN sur DEBUG_EVENT
     
              end;
     
              ContinueDebugEvent(vRcDbgEvt.dwProcessId,
                                             vRcDbgEvt.dwThreadId,
                                             DBG_CONTINUE);
            end;
            Application.ProcessMessages;
          end;
        end;
      end;
    end;
    Avec Windows dans les uses, FStProcess le chemin + nom du process à exécuter, FBoRunning booléen de contrôle d'arrêt de la boucle.

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Oui, merci. C'est effectivement ce que j'avais déduit des diverses docs trouvées sur le web.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/12/2013, 05h20
  2. Message DEBUG intempestifs
    Par anas4120 dans le forum Tomcat et TomEE
    Réponses: 29
    Dernier message: 25/11/2012, 00h56
  3. Réponses: 2
    Dernier message: 28/08/2009, 15h20
  4. Affichage les messages debug
    Par Esil2008 dans le forum Logging
    Réponses: 1
    Dernier message: 04/07/2009, 09h15
  5. [C++] [API WINDOWS] Vider la boucle de messages !
    Par chronos dans le forum Windows
    Réponses: 1
    Dernier message: 04/08/2005, 15h53

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