Page 1 sur 1
Problème curieux...
Publié : dim. 22/janv./2006 23:56
par popstatic
Bonjour à tous!
Je me retrouve face à un problème assez curieux, à savoir, j'ai un code qui s'exécute très bien en mode debug.... mais qui plante (sans message d'erreur) en mode normal!
je poste pas ici directement le code car je voudrais d'abord savoir si vous avez déjà été confronté à ce genre de situation....
pour info (et pour les intéressés) j'utilise l'include FTP (fonctions ftp codées en purebasic, pour une portabilité) de Num3 posté sur le forum anglais.
bien évidemement si besoin est, je vous posterai tout mon code.
merci d'avance.[/b]
Publié : lun. 23/janv./2006 0:02
par Chris
Ca m'est déjà arrivé deux ou trois fois.
Je n'ai pas d'exemple sous la main, par contre.
Publié : lun. 23/janv./2006 0:29
par Oliv
Je ne pense pas que ça vienne du code de Num3 car je l'utilise aussi je je n'ai aucun problème avec, pour le reste je nepeux pas t'en dire plus.
Publié : lun. 23/janv./2006 6:37
par cederavic
ça m'est deja arrivé aussi en utilisant des thread.
Publié : lun. 23/janv./2006 7:25
par Anonyme2
il est possible que tu ais des lignes comme ceci par exemple
debug code ....
qui s'exécutent en mode debug mais qui sont ignorées si tu n'es pas en mode debug
Publié : lun. 23/janv./2006 9:23
par Dräc
Sinon, je ne l’ai jamais utilisé, mais que penses-tu de la librairie « OnError » pour traquer le problème ?
Publié : lun. 23/janv./2006 16:51
par popstatic
Merci de vos promptes réponses...
Effectivement OnError était de très bon conseil je devrai meme l'utiliser plus souvent...
J'ai obtenu la description d'erreur suivante:
An attemped read or write to/from an address to which that process isn't allowed ligne 259
Donc si j'ai bien compris le programme tente d'acceder à une zone mémoire non réservée..
J'ai placé le OnError comme ceci:
Code : Tout sélectionner
Procedure FTP_Store(Ftp.l, filename.s, ProgBarGadgetID.l, Log_Gadget)
OnErrorResume()
Resultat$ = GetErrorDescription()
Resultat$ = Resultat$ +" ligne "+ Str(GetErrorLineNR())
ConnectionID = 0
j'en déduis donc que l'appel de la fonction provoque le crash (en plus la ligne 259 correspond à l'appel de la fonction donc je n'ai pa grand mérite haha)
pour info je n'appelle pas cette fonction comme un thread, et elle n'est pas appellée par un thread,
mais depuis une fonction elle même appellée par un thread.
Ceci dit, pourquoi cela buguerai en mode normal et pas en mode debug?...
je vais chercher du coté d'une portion de code inclue dans un debug....
merci à vous!
Publié : lun. 23/janv./2006 17:59
par Guimauve
J'ai déja eu un problème similaire avec les chaines de caractères dans des librairies compilées avec Tailbite.
En mode Debug tout marchait très bien, mais avec le programme compilé rien à faire ça ne marchait pas du tout.
La procédure devait retourner une chaine après quelques manipulations, mais elle me retournait le caractère BackSpace ou quelque du genre.
A+
Guimauve
Publié : lun. 23/janv./2006 22:02
par popstatic
Après plusieurs traçages de variables (faits avec des messagerequesters le programme fonctionnant en debug....) j'ai constaté ce qui clochait sans vraiment comprendre pourquoi.
A savoir, la procédure FTP_STORE prends des paramètres, ces paramètre je les fournissait comme ça:
Code : Tout sélectionner
FTP_Store(donnees\IdFtp,donnees\DossierThumbs+DirectoryEntryName(), #ProgressBar_1)
à savoir des membres de la structure
donnees
Apparement ce passage fonctionne bien en debug, mais pas en normal: après avoir controllé les parametres recus par Ftp_Store, c'était du n'importe koi! alors évidemement mauvais accès mémoire et tout ce qui s'ensuit...
j'ai donc réglé le problème en déclarant la structure en global et en y accedant directement depuis ftp_store (je bypasse les paramètres).
Je sais que c'est goret, j'aurais aussi bien pu passer le pointeur de la structure en paramètre mais bon...
reste à savoir pourquoi un tel passage de paramètre fonctionne en debug et non en normal.
D'autant plus que même si je remplissais des variables "normales" avec le contenu des membres de la structure, et que je passais ces variables en paramètre, ça foirait! C'est vraiment le passage de paramètre qui à foiré sur ce coup là. c'est vraiment bizarre, un bug de purebasic?.
Vivement le threadsafe? oui c'est certain, mais les problèmes strings+thread concernent à la fois le debug et normal non?
curieux...
Publié : mar. 24/janv./2006 13:15
par Anonyme2
Il ya bien 2 ans LSI a posté un code dans la section bug pour un plantage grave
j'ai regardé son code et pour tracer l'erreur j'avais mis des debug et puis plus d'erreur ...
J'ai fini par trouver le problème suivant
La définition de la structure PB était fausse (structure d'une API), elle avait évoluée avec les versions des OS de MS. On avait un plantage car la pile était écrasée, on atterrisant n'importe ou en mémoire...
Les débug ajoutés après la ligne de code incriminée faisait que c'était les valeurs situées après ma ligne de code qui étaient écrassées et plus l'adresse de retour de la procédure, donc ça fonctionnait
C'est peut-être la cause du problème, vérifie ta structure