cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 2006
-
25 avril 2006 à 21:55
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 2006
-
26 avril 2006 à 02:53
Salut à tous! Je vous présente un bout de code d'un bug que j'ai pu reproduire (ça m'a pris du temps avant de le trouver). Mon problème c'est qu'a l'execution sous l'IDE VB6 tout marche parfaitement, mais une fois compilé (mode optimisation de la rapidité d'execution)... c'est autre chose. Comment trouver un bug qui n'apparait qu'a la compilation alors que tout se passe bien lors du débogage sous l'IDE ? A vrai dire j'ai mis la journée a trouver d'ou venait le problème donc si vous avez des idées (a savoir que j'avais quand même Numega Smartcheck sous la main que je conseil d'ailleurs à tous le monde).
Voici le bout de code mystère que j'ai pu reproduire:
Dim ClassLenght As Long
classlenght = -2147483599 'J'ai mise cette valeur car c'est celle qui apparait lors du bug
classlenght = classlenght - &H80000000
Essayer le d'abord sous l'IDE en debugage puis directement en executable après compilation (mode optimisation de la rapidité).
Le message suivant apparait: Dépassement de capacité.
Je désassemble pour comprendre en me disant qu'en optimisant VB à peut être mal fait son travail en n'utilisant pas des instructions assembleurs. Même pas! Le compilateur a carrement interprété le code VB comme érroné et le code pointe directement sur un message d'erreur.
Bizarrement ça ça passe:
Dim ClassLenght
As Long
classlenght = -2147483599 - &H80000000
Si quelqu'un à la solution à ce problème, ou une explication du pourquoi de la chose je suis interessé.
@ Bientôt pour de nouvelles aventures au coeurs de VB6!
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20061 26 avril 2006 à 01:27
Salut Gobillot et merci pour ton intervention. Effectivement &h80000000 est un nombre particulier car il affecte directement le signe. Malgrès tout c'est dommage que le debogeur ne se comporte pas comme l'exe.
L'utilisation de CDbl est limité si l'on veux un code optimisé tout comme l'utilisation de Val() que m'a conseillé Jack que je remercie également pour son aide.