Espion pour trouver les bugs d'un programme

Contenu du snippet

Voici une procédure qui va permettre "d'espionner" un programme écrit en delphi en écrivant les évenements et erreurs dans un fichier texte compatible Excel (.CSV).

Source / Exemple :


// La déclaration
procedure SaveLog(LeTexte:String);

procedure SaveLog(LeTexte:String); 
//------------------------------------------------------------------ 
// Sauvegarde les bugs et évenements dans un fichier texte 
// www.dfc-automatisme.fr 
//------------------------------------------------------------------ 
var 
  Fichier       : TextFile; 
  NomFichier    : String; 
  FichierDesti  : String;        
  LigneEcr      : String; 
  LigneLec      : String; 
  MS            : TMemoryStatus; 
  nLigne        : Longint; 
begin 
  NomFichier  := ExtractFilePath(Application.ExeName) + 'suivi.csv'; 
  nLigne      := 0; 

  // Création de la ligne a écrire 
  GlobalMemoryStatus(MS); 
  LigneEcr := DateToStr(Date) +';'+                               // Date 
              TimeToStr(Time) +';'+                               // Heure 
              TimeToStr((GetTickCount/1000)/(24*3600)) +';'+      // Temps de marche du PC 
              Format('%d %%', [MS.dwMemoryLoad]) +';'+            // Mémoire vive utilisée 
              LeTexte;                                            // Description 

  AssignFile(Fichier, NomFichier);      // Ouverture fichier 
  if not FileExists(NomFichier) then 
    Rewrite(Fichier)                    // Création du fichier si innexistant 
  else 
    Append(Fichier);                    // Mode ajout sinon 
  WriteLn(Fichier, LigneEcr);           // Ecriture de la ligne 
  
  Reset(Fichier);                       // Début fichier 
  While not Eof(Fichier) do              
    begin 
      ReadLn(Fichier,LigneLec); 
      Inc(nLigne);                      // Compte le nombre de lignes 
    end; 
  CloseFile(Fichier);                   // Fermeture fichier 

  // Après 1000 ligne on fait une copie de sauvegarde et on supprime le contenu du fichier courant 
  if nLigne > 1000 then 
    begin 
      FichierDesti := LeftStr(NomFichier, Length(NomFichier)-4)+FormatDateTime('_yyyy-mm-dd_hh-nn-ss".csv"', Now); 
      CopyFile(PChar(NomFichier), PChar(FichierDesti), False); 
      AssignFile(Fichier, NomFichier);      // Ouverture fichier 
      Rewrite(Fichier);                     // Supprime le contenu 
      CloseFile(Fichier);                   // Ferme le fichier 
    end; 
end;

// L'utilisation
SaveLog('DESCRIPTION');

// Exemple d'utilisation : 
  try 
    PortCom.Connected := True; 
  except 
    SaveLog('Impossible de connecter le port COM1'); 
  end; 

  if not FileExists(NomFichier) then 
    SaveLog('Fichier ' + NomFichier + ' introuvable'); 

// Aperçu du fichier : 
// 27/05/2004;15:40:03;07:22:04;78 %;Démarrage d'Easytrack 
// 27/05/2004;15:42:30;07:24:32;79 %;Fermeture d'Easytrack

Conclusion :


Le fichier courant se nomme suivi.csv et au bout de 1000 ligne une archive est créée sous la forme suivi_2004-06-01_10-40-00.csv pour éviter d'avoir de trop gros fichiers.
Si le fichier n'existe pas il est créé automatiquement.

Cette procédure me permet, en autre, de débugger les programmes et de connaitre la source des plantages (erreur de code ou manip client ).
Des questions ou plus d'infos sur http://www.dfc-automatisme.fr/forums/viewtopic.php?t=11

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.