Comment savoir où est l'erreur dans un exe ?

Résolu
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
- 14 juin 2014 à 18:46
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
- 16 juin 2014 à 17:57
Bonjour,
J'ai mis à disposition un programme VB6 après l'avoir compilé; c'est donc un .exe.
Un utilisateur me signale une erreur 13 type mismatch.
Je sais ce que ça signifie mais ça peut être n'importe où dans le programme.
J'essaye de reproduire le même cas mais chez moi ça ne plante pas, ni dans la version vbp, ni dans la version exe.

Comment puis-je savoir sur quelle instruction le programme se plante ?

Question subsidiaire : je suis en win 7/64, lui en win 8.1 : ceci peut-il être une raison ?

Merci d'avance pour votre aide

10 réponses

NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
15 juin 2014 à 13:15
Tu peux aussi numéroter tes lignes :
MsgBox ...
Devient par exemple :
210 MsgBox ...

Ensuite dans ton message d'erreur, tu utilises la variable ERL qui indiquera le numéro de la ligne incriminée.
1
NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
14 juin 2014 à 18:59
Tentes de gérer l'erreur avec On Error.
VB6 est très peu bavard concernant la pile des appels.
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
15 juin 2014 à 08:50
Bonjour,
Pour qu'un message en dise plus que "type mismatch" je pensais effectivement gérer moi-même on error.
Je me suis mal exprimé.
Comment puis-je savoir dans cette routine d'interception d'erreur sur quelle instruction le programme se plante pour le mettre dans une msgbox ?
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
Modifié par Whismeril le 15/06/2014 à 10:01
Bonjour, il y a longtemps que je n'ai pas fait de VB6, il me semble le souvenir que si on place le On Error au point d'entrée du programme, l'instruction est valable pour toute fonction ou procédure appellée ensuite, et ainsi n'écrire qu'une procédure de gestion d'erreur.
Si cela est bien possible, tu peux dimensionner une variable globale de type string, à chaque début de Sub tu écris dedans le nom de la sub, les paramètres, et le nom de la sub qui appelle celle ci(en la récupérant dans la valeur précédente de ta variable.
Dans la gestion d'erreur tu afficheras un message d'erreur qui donneras ces informations. Tu peux aussi écrire un petit log avec ces infos.

Si cela ne suffit pas tu peux alors écrire un log à chaque début ou fin de sub avec les mêmes données ou plus si tu le souhaites afin de suivre pas à pas ce qui se passe.



Posté depuis CCM Live forum pour iPhone/iPad
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
15 juin 2014 à 10:41
... sans oublier que lorsqu'on sort d'une Sub il faut remettre dans la variable le nom de celle qui l'a appelé.
La difficulté est que le programme contient 210 Sub
et surtout que si une Sub appelle une Sub qui appelle une Sub ... une variable ne suffit plus, il faut faire une gestion de pile !

N'y a-t-il vraiment aucune info qu'on puisse récupérer dans un module on error ?
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
15 juin 2014 à 16:57
Non je ne te proposais pas de tout mette bouta bout, juste ce qui concerne la sub en cours et qui l'a appelé.
Tu écrases le contenu à chaque fois.
Après si tu en as 210 à modifier je comprends que tu préfères une autre solution
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
Modifié par Herve_be le 15/06/2014 à 18:00
Le problème est que lors de l'exit sub il faut remettre la sub en cours, la précédente en fait, et celle qui l'a appelé, la précédente de la précédente, donc il faut une gestion de pile.
Et puis le fait de connaître la sub en cours serait déjà en effet pas mal, de la à connaître le statement qui pose problème ...
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
15 juin 2014 à 15:53
J'ai raté la réponse concernant Try ... Catch : on n'est pas en VB.net là !

Numéroter les lignes est une excellente idée.
Est-il possible de numéroter les lignes automatiquement sans devoir écrire un nombre devant chacune d'elles ?
0
NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
15 juin 2014 à 18:16
Oui, avec l'addin MZTools (gratuit pour VB6/VBA).
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
15 juin 2014 à 18:52
J'ai cet addin; je n'avais pas remarqué qu'il pouvait ajouter des n° de ligne uniques sur tout un projet; ainsi je peux identifier exactement la ligne où une erreur s'est produite; déjà un grand merci !
Question subsidiaire : j'ai 15 Forms avec leur code dans ce projet; l'une d'elles est toujours chargée; dois-je ajouter un error handler dans chaque form ou est-il possible d'ajouter un seul "on error goto" soit vers le code de la Form qui est toujours chargée soit vers un module commun ?
0
NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
15 juin 2014 à 19:26
Il faut ajouter un On Error à toutes les fonctions de base au moins (Timer1_Timer, Command1_Click, ...)
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
16 juin 2014 à 09:22
Veux-tu dire toutes les sub déclenchées par un évènement comme _Click, _Change, _Mousedown, _Load, ...
mais pas les sub appelées comme des sous-routines ou des fonctions ?
Dans ce cas que se passe-t-il en cas d'erreur dans un de ces modules; est-ce le on error de la sub qui l'a appelé qui reste valide ?
Ou alors faut-il on error sur les routines aussi ?
0
vb95
Messages postés
2775
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
30 juin 2022
151
16 juin 2014 à 09:35
Salut Herve_be !
Et si tu demandais à cet utilisateur dans quel cas précis et avec quelles valeurs si il y a ce message d'erreur se produit !
Ne serait-ce pas plus constructif !
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
16 juin 2014 à 10:49
C'est évidemment la première chose que j'ai faite.
Le problème est que je ne parviens pas à reproduire la même chose chez moi, comme indiqué dans ma question initiale.
0
vb95
Messages postés
2775
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
30 juin 2022
151
16 juin 2014 à 14:22
salut Herve_be
Le problème n'est pas de reproduire la même chose chez toi mais de comprendre pourquoi ce problème arrive chez lui et pas chez toi !
Ce n'est pas du aux 32 bits ou 64 bits de Windows car si mes souvenirs sont bons VB6 est uniquement 32 bits !
Est-ce dû aux problèmes de compatibilté de VB6 avec Windows 8.1 ? Ton Exe touche -t-il à des "zones sensibles" de Windows (base de registre, dosiers système ou autre " ?
Cet utilisateur exécute-t-il cet exe en tant qu'administrateur ?
Quelles sont les actions exactes qui amènent l'erreur chez cet utilisateur ?
0
jordane45
Messages postés
35767
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
358
16 juin 2014 à 09:49
Bonjour,

Question subsidiaire : je suis en win 7/64, lui en win 8.1 : ceci peut-il être une raison ?
Oui... ça peut venir de DLL que tu aurais mis dans ton prog ou simplement par exemple.

Pour ce qui est de trouver où est l'erreur... je ne vais pas revenir sur tout ce que les autres t'ont proposés.... j'ajouterai seulement qu'il te suffit de faire une recherche à Grosse maille pour essayer de trouver où se trouve le souci... puis une fois la/les Sub identifées d'affiner ta recherche...


0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
16 juin 2014 à 15:33
Bonjour,
J'ai donné à cet utilisateur une version avec gestion d'erreur uniquement dans le code de la form qui pose problème et ... bingo : message d'erreur avec le n° de ligne concernée.
if Surface <> 0 then ...
"Surface" est le nom d'une Textbox ce qui explique l'erreur.
A ma prochaine intervention ici je mettrai donc le problème comme résolu.
Je ne comprends cependant pas pourquoi elle ne se produit pas chez moi !
0
vb95
Messages postés
2775
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
30 juin 2022
151
16 juin 2014 à 17:02
Salut Herve_be
Tu dis "Je ne comprends cependant pas pourquoi elle ne se produit pas chez moi ! "
C'est bien tout le problème !
As-tu mis Option Explicit dans les options générales du projet ? dans le cas contraire c'est possible que VB fait en sorte de prendre la valeur numérique inscrite dans la Textbox et ne déclenche pas l'erreur chez toi !
Est-ce la seule erreur dans ce projet ?
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
16 juin 2014 à 17:14
Non je n'ai pas d'option explicit.
J'avoue que c'est une erreur de ne pas déclarer les variables, mais il y en a tellement maintenant que ce serait vraiment très fastidieux.

Est-ce la seule erreur ?
Je n'en sais rien, en tout cas 750 personnes ont téléchargé mon ensemble de programmes, autant dire qu'il a été pas mal trituré en plus des tests que j'ai faits moi-même, et c'est la première fois qu'on me relate cette erreur.
Je trouve quand même bizarre que VB prend la valeur numérique chez 749 utilisateurs, chez moi aussi, et pas chez un utilisateur en particulier !

Toujours est-il que ma question initiale
Comment puis-je savoir sur quelle instruction le programme se plante ?
est résolue et que je vais maintenant mettre cette gestion d'erreur dans tous les évènements.
Un tout grand merci pour votre aide.
0
vb95
Messages postés
2775
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
30 juin 2022
151
16 juin 2014 à 17:20
Dommage que tu n'ais pas déposé le projet en tant que source sur le site !
0
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
Modifié par cs_ShayW le 16/06/2014 à 17:25
Bonjour

normalement tu aurais du trouver l'erreur chez toi aussi
verifie ton code s'il n y a pas d'autre erreurs du meme genre .

Avec le vb.net tu aurais une erreur de compilation ,l'un des inconvénients du vb6 tout passe à la compilation et après à toi de jouer.....
0
Herve_be
Messages postés
954
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2022
2
16 juin 2014 à 17:57
Je suis conscient que VB6 est un vieux machin.
Mais tout comme il serait fastidieux de déclarer toutes les variables, je n'imagine pas convertir tout ça en VB.net !
Toujours est-il que lorsque j'aurai intercepté les éventuelles erreurs dans les 210 évènements (MZ-tools facilite quand même bien la tâche pour ajouter le code nécessaire) il sera facile de les corriger.
0