Mystèrieux bugs dans le compilateur VB6...
Dans le cadre du développement de mon décompilateur pour Visual Basic j'ai rencontré quelques limitations assez étonnantes du casting implicit de Visual Basic 6.0.
Je vous présente donc un morceau de code qui me posais problème et que j'ai pu reproduire. Mon problème est qu'à l'éxecution, sous l'IDE de Visual Basic 6.0 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:
1 2 3 |
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 appropriées. Même pas! Le compilateur a directement 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é.
Sylvain Bruyere
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :