Aide TailBite

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Aide TailBite

Message par lionel_om »

Bonjours à tous.
J'ai une question sur TailBite, d'autres viendront surment par la suite.

Avec TailBite, on peut créer des fonctions myFct_DEBUG() (qui doit être du type CDLL).
Mais a-t-on besoin de créer une la fonction myFct() ???

Dans l'exemple de la doc :

Code : Tout sélectionner

   ProcedureDLL MyDiv(a, b)
     ProcedureReturn a/b
   EndProcedure

   ProcedureCDLL MyDiv_DEBUG(a, b)
    If b=0
      TB_DebugError("Division by zero!")
    EndIf
   EndProcedure
On peut pas garder que la première fonction ?

Ou sinon c'est que la fonction myDiv8debug est exécutée si le debuggeur est activé, sinon on exécute l'autre (cad myDiv()) ???

Je sais pas si je suis assez clair...
Merci d'avance pour votre aide !!! :P
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Aide TailBite

Message par Chris »

lionel_om a écrit :Je sais pas si je suis assez clair...
Ben pas trop, non!!!


Ta procédure principale, c'est celle la:

Code : Tout sélectionner

ProcedureDLL MyDiv(a, b) 
   ProcedureReturn a/b 
EndProcedure 
c'est sur elle que tu travailles

l'autre, c'est celle qui t'affichera un message au cas ou tu mettrais 0 comme paramètre 'b' de la première, ce qui ferait une division par 0

Mais tu peux ne mettre que la première si tu veux, tu n'auras simplement pas de débugage en cas de plantage. (avec le debugger activé, evidemment)

(Et c'est ProcedureCDLL pour la procedure de debuggage)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je n'ai jamais utilisé cette faculté mais telle que tu l'as présente, on dirait plutôt une fonctionnalité d'informations sur des paramètres afin de s'assurer du bon fonctionnement de la procédure; ce n'est pas réellement du déboguage, non?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

La procédure, tu peux lui faire dire ce que tu veux!

Tu peux, (je pense, j'ai jamais essayé!), mettre plusieurs TB_DebugError("Ton_Message") selon les différents tests que tu fais à l'intérieur. Ca revient à avoir les fonctions de débuggage qu'on avait avant, dans les versions précédentes de PureBasic
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

En fait, j'ai pas du être assez clair en effet.
Donc je vais procédé par étapes et petites questions :

1 ) Qd on créer des fonction myFct() et myFct_DEBUG() laquelle est lancée et à quel moment ? Est-ce que myFct() sera exécutée ou y'aura juste la fct DEBUG qui sera lancée ?

2 ) Plutot que de faire copier/coller pour les deux fcts précédentes (avec quelques lignes de debuggage de plus pour myFct_DEBUG) est-ce qu'on ne peut pas juste utiliser myFct_DEBUG et supprimer l'autre ? myFct() ne devient-elle pas inutile ?

3 ) Est-ce que myFct_Debug() est exécutée qd on est on mode programmation (que la fct n'est pas dans un EXE) et myFct() est exécutée quand on aura généré un EXE ?

Je suis plus clair là ?

Lionel
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

lionel_om a écrit :En fait, j'ai pas du être assez clair en effet.
Donc je vais procédé par étapes et petites questions :

1 ) Qd on créer des fonction myFct() et myFct_DEBUG() laquelle est lancée et à quel moment ? Est-ce que myFct() sera exécutée ou y'aura juste la fct DEBUG qui sera lancée ?

2 ) Plutot que de faire copier/coller pour les deux fcts précédentes (avec quelques lignes de debuggage de plus pour myFct_DEBUG) est-ce qu'on ne peut pas juste utiliser myFct_DEBUG et supprimer l'autre ? myFct() ne devient-elle pas inutile ?

3 ) Est-ce que myFct_Debug() est exécutée qd on est on mode programmation (que la fct n'est pas dans un EXE) et myFct() est exécutée quand on aura généré un EXE ?

Je suis plus clair là ?

Lionel
myFct(), c'est ta fonction principale. C'est elle qui contient ton code, et c'est elle que tu doit appeler. L'autre, c'est Pure qui l'appelle quand il est en mode débugger et que la fonction principale comporte une erreur, tu n'as pas à t'en occuper. Si elle existe, elle est appelée, si elle n'existe pas, .....

myFct(), est la fonction obligatoire, c'est elle qui fait tourner ta lib. L'autre est facultative, c'est juste une fonction de débuggage qui, normalement, ne sert plus une fois l'exe compilé.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

nico a écrit :Je n'ai jamais utilisé cette faculté mais telle que tu l'as présente, on dirait plutôt une fonctionnalité d'informations sur des paramètres afin de s'assurer du bon fonctionnement de la procédure; ce n'est pas réellement du déboguage, non?
Justement, si tu fais une commande de dessin tu peux renvoyer le même message d'erreur que PB quand on dessine hors d'un startdrawing() stopdrawing() valide
Je savais pas comment le faire donc je vais regarder le code généré assembleur par tailbite pour les fonctions de débugage :)

Dri
Dernière modification par Dr. Dri le sam. 15/oct./2005 11:04, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Petite rectification:

j'ai dit
L'autre, c'est Pure qui l'appelle quand il est en mode débugger et que la fonction principale comporte une erreur
Il l'appelle toujours, même si il n'y a pas d'erreur! :roll:

Compile ça en librairie

Code : Tout sélectionner

ProcedureDLL MyDiv(a, b)
  ProcedureReturn a/b
EndProcedure

ProcedureCDLL MyDiv_DEBUG(a, b)
  If b = 0
    TB_DebugError("Division by zero!")
  EndIf
  
  If b > a
    TB_DebugError("B est plus grand que A")
  EndIf
  
  If b < a
    TB_DebugError("B est plus petit que A")
  EndIf
EndProcedure
et appelle la fonction

Code : Tout sélectionner

Debug MyDiv(10,0)
et change les valeurs pour que A soit plus petit ou plus grand que B
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Le fait de faire une procédure à part, ça limite quand même, car on ne peut pas intervenir en milieu de procédure; c'est avant ou rien!
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

En fait, si la procédure DEBUG existe elle est d'abord appelée, puis après c'est au tour de la fonction NORMAL qui est appelée La preuve :

Code : Tout sélectionner

ProcedureDLL myMult(*par1.l, par2.l)
  If PeekL(*par1) = 0 Or par2 = 0
    ProcedureReturn -1
  EndIf
  ProcedureReturn PeekL(*par1) * par2
EndProcedure


ProcedureCDLL myMult_DEBUG(*par1.l, par2.l)
    PokeL(*par1, PeekL(*par1) * 5)
  If PeekL(*par1) = 0 Or par2 = 0
    TB_DebugError("One paramater is zero!")
    ProcedureReturn -2
  EndIf
  ProcedureReturn PeekL(*par1) * par2 * 2
EndProcedure



val.l = 5
MessageRequester("", Str(myMult(@val, 2)), 0)
  ; val a bien été multiplié par 5 : 5 * 5 * 2 = 50
  ; 50

MessageRequester("", Str(myMult(@val, 0)), 0)
  ; Erreur
Donc faut faire attention sinon on a deux fois le mm code d'exécuté ... :?

EDIT : donc les procédures DEBUG sont uniqument utiles pour contrôler les paramètres passés ?!!
Dernière modification par lionel_om le sam. 15/oct./2005 11:16, modifié 1 fois.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

8O

Ou est le problème?
Qu'est-ce qui t'empèche de faire des tests dans la procédure principale? Rien!

La proc de debuggage permet seulement d'arreter le programme sur l'erreur, et de te faire voir ce qui ne vas pas.
Une fois l'exe compilé, qu'elle soit là ou pas ne change rien à l'affaire!
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

donc les procédures DEBUG sont uniqument utiles pour contrôler les paramètres passés ?!!
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu as essayé en remplacant les MessageRequester() par des 'Debug'

Ton message "One paramater is zero!" ne s'affiche pas dans le debugger!

[Edit]

Je viens de regarder l'aide, effectivement, la procedure Debug est appelée avant. Cela dit, ça ne change rien
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est quand même pas très fonctionnel, mais bon si on fait une lib c'est quelle est un minimum débogué et puis on a toujours le source. Donc c'est utile surtout pour ceux qui utilisent la lib.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

nico a écrit :mais bon si on fait une lib c'est quelle est un minimum débogué
Justement, les libs de PB sont (quasiment) exemptes de bugs mais ce genre de chose concerne surtout les utilisateurs... Essaye un code qui enchaine deux startdrawing() sans stopdrawing(). Les fonctoins ont beau ne pas contenir de bug le debugger te criera dessus parce que tu ne l'utilise pas correctement.
C'est surtout ca le but...

Dri
Répondre