Problème curieux...

Programmation d'applications complexes
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

Problème curieux...

Message 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]
Asus bien? asus tres bien!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ca m'est déjà arrivé deux ou trois fois.

Je n'ai pas d'exemple sous la main, par contre.
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

ça m'est deja arrivé aussi en utilisant des thread.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Sinon, je ne l’ai jamais utilisé, mais que penses-tu de la librairie « OnError » pour traquer le problème ?
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

Message 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!
Asus bien? asus tres bien!
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

Message 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...
Asus bien? asus tres bien!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Répondre