Meilleure méthode pour debuguer une appli

cs_flagada Messages postés 60 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 18 février 2011 - 16 févr. 2011 à 21:07
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 18 févr. 2011 à 16:00
Bonsoir

Je développe un petit lecteur audio qui remporte un succès modeste mais pour moi pas négligeable (http://dekibulle.free.fr)
Sauf que je suis confronté a un problème (forcément ). Un certain nombre de personnes se plaignent d'un bug assez récurent de "indice de liste hors limite (0)".
De mon côté j'ai beaucoup de mal a reproduire ce bug et je n'arrive pas à localiser la source du prolème.

Ainsi je me demandais s'il serait possible de créer une sorte de log d'exécution histoire de cerner le problème.
D'où ma question: que pensez-vous d'un système qui enregistre les diverses opérations effectuées par le logiciel (notamment quelle procédure est en cours d'exécution, etc...)? Et quelle serait la meilleure méthode pour y parvenir?
Écrire un peu partout une ligne du genre :
If Debug then EcritLog('Procedure TForm1.LitChanson');
me semble très fastidieux! Serait-il possible de créer automatiquement ce genre de chose (une procédure lancée automatiquement a chaque opération du logiciel ou quelques choses comme ça) ?

Merci d'avance pour votre aide
A+
Fred
A voir également:

13 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 févr. 2011 à 21:12
Perso je mets des WriteLn dans le code et j'active la console avec {$APPTYPE CONSOLE} dans le fichier projet, ensuite je regarde et j'essaye de voir où le code ne fait pas ce que je veux.

Au pire tu peux écrire un petit programme qui prend des fichiers source et écrive les procédures de log automatiquement dans le code, ensuite tu compiles le fichier source modifié. Mais c'est juste une idée.

Par contre, "Indice de ligne hors limites (0)" c'est quand tu accèdes au premier élément d'une liste qui ne contient aucun élément. En fait il faudrait toujours vérifier avec un truc du type "if Length(maliste) 0" ou "if listbox.items.count 0", enfin jpeux pas trop dire sans le code sous les yeux.

Cordialement, Bacterius !
0
cs_flagada Messages postés 60 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 18 février 2011
16 févr. 2011 à 21:21
Merci pour ta réponse!
Je ne peux pas vraiment utiliser la console parce que l'objectif serait que les utilisateurs puissent m'envoyer un log. La routine qui va modifier le code source ça peut être une solution effectivement. Genre après chaque début de procedure ou de fonction on va ajouter un writeln pourquoi pas.
Pour le bug en lui même le problème c'est qu'il y a tellement d'endroit où ça pourrait se trouver! Et de mon côté je n'ai quasiment jamais eu ce bug
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 févr. 2011 à 21:27
Ha ok du côté des clients !
Ben euh oui je pense que faire une copie "debug" des sources avec tous les écritures log dedans que tu donnes à l'utilisateur et à qui tu demandes de te renvoyer "log.txt" ou un truc du genre (par contre utilise pas writeln sans console ^^).

Mais bon faudra toujours renseigner ce que le programme doit écrire dans le log, il ne peut pas le deviner. Donc à moins que tu n'aies vraiment pas le temps le mieux ça serait de passer une couche automatique d'écritures puis de rajouter les endroits délicats à la main.

Sinon tu peux aussi essayer des codes gratuits sur le net comme "delphi logging" dans google - tu as par exemple Smart Inspect et Raize Codesite qui vont faire ce que tu demandes et bien plus encore (copie des piles du registre en cas d'exception, etc ...).

Cordialement, Bacterius !
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
16 févr. 2011 à 22:30
Bonsoir

Au cas où cela t'intéresserais, j'utilise régulièrement le couple "fichier log" + "try except local" pour débusquer ce genre de problèmes.

Par exemple :

procedure TUsine.MiseAJourSuiviLignes;
var
  I,J : Integer ;
  S : String ;
begin
  J := 0 ;
  try
    for I := 0 to Lignes.Count - 1 do
    begin
      J := I ;
      Lignes[I].MiseAJourSuivi ;
    end;
  Except
    on E : Exception do
    begin
      S := Format( 'TUsine.MiseAJourSuiviLignes : Ligne [Index=%d] (%s)', [J, .Message] ) ;
      LogMessage( S );
    end;
  end;
end;



N.B. Après, libre à toi d'activer en permanence ou non le traitement fait dans la procédure LogMessage.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
16 févr. 2011 à 22:32
Une erreur s'est glissée dans le code, il faut lire :

S := Format( 'TUsine.MiseAJourSuiviLignes : Ligne [Index=%d] (%s)', [J, E.Message] ) ;


Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 févr. 2011 à 00:03
Salut,

C'est si difficile que ça à localiser ?

Tu ne dois pas avoir 100 listes dans ce genre d'application. Et c'est un accès à l'élément[0] d'une liste vide (probablement une TStringList) qui est en variable globale (sécuriser l'accès à cette liste dans les routines), ou alors une liste dans une boucle repeat (utiliser while ou for)...


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 févr. 2011 à 22:09
j'ai jetté un oeuil dans ta source ... houla ... ça necessite un bon netoyage et pleins d'optim.
mais bon le prog est jeune, c'est déjà pas mal fonctionnel,
bravo, continus sur cette lancée.

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
cs_flagada Messages postés 60 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 18 février 2011
18 févr. 2011 à 09:38
ouaip je suis conscient de mes lacunes... mais je suis pas un pro dans le domaine, je fais ça a mes heures perdues et j'avoue que je ne sais pas trop par ou commencer pour faire un truc nickel propre
en plus je me dis que quitte a tout reprendre, autant passer sur un autre langage car j'ai l'impression de delphi n'est pas optimum (pas d'unicode, quelques fuites de mémoire, etc...)
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 févr. 2011 à 10:45
pas d'unicode

Oui le support unicode est possible mais pénible avant les versions "modernes" de delphi (genre delphi 2005), après quoi il est intégré par défaut.

quelques fuites de mémoire

Pour ça le bug se trouve entre la chaise et le clavier (Delphi ne produit pas de fuite de mémoire par lui-même, c'est le code que tu lui ajoutes qui peut en provoquer si tu ne libères pas tes objets - si tu as l'occasion de lui parler, Cirec est un pro des fuites de mémoire avec son outil secret )

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 févr. 2011 à 12:31
De mon côté j'ai beaucoup de mal a reproduire ce bug et je n'arrive pas à localiser la source du prolème.

c'est normal, l'auteur d'un programme refait toujours les mêmes actions..
et il n'imagine pas un seul instant qu'un utilisateur puisse cliquer ici ou là et taper autre chose que prévu..

Ce sont donc les autres qui remontent les anomalies..

je rejoins Caribensila au vu du nombre impressionnant de TStringList utilisé dans le soft.

Avec quelques Try Except end bien placés et
un bon traitement d'erreurs..

Delphi n'est pas en cause dans ce problème.

cantador
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
18 févr. 2011 à 14:46
« Cirec est un pro des fuites de mémoire avec son outil secret »


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 févr. 2011 à 15:27
pour info la version personnelle de DELPHI 2005 est toujours disponible à l'adresse:
DELPHI 2005

@+
JLEN
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
18 févr. 2011 à 16:00
@Jlen100

Le hic c'est que "Depuis février 2009, CodeGear/Embarcadero ne fournit plus de clé pour Delphi 2005 édtion Personnnel"

C'est dommage j'aurais bien fait la migration aussi.

Jean.
0
Rejoignez-nous