[VisualC++ 6] Help ! Version Win32 release tombe en erreur

Help ! Version Win32 release tombe en erreur [VisualC++ 6] - C++ - Programmation

Marsh Posté le 01-03-2005 à 13:27:44    

Je suis complètement bloqué !!! Help !
 
J’ai développé une application en phase finale de peaufinement et d’amélioration.
 
Je tente de générer le code définitif de cette application.
La version "Win32 release" tombe en erreur sur le message : "First-chance exception in PermutMatrix.exe: 0xC0000005: Access Violation" alors qu’en mode debug tout marche bien.
 
Cette erreur apparaît alors que jusqu’ici la version "Win32 release" avait toujours fonctionné sans problème.
 
Je n’arrive pas à trouver ce qui produit cette erreur.
Elle intervient très tôt dans la mise en place de l’application, lors de la création de la MainFrame au cours de CMainFrame::Oncreate(…), lors de la création des barres d’outils et de contrôle.
 
J’ai vérifié tous mes pointeurs, éliminé un maximum de code pour restreindre l’application et cerner le problème. Rien.
J’en suis arrivé à soupçonner que l’erreur ne vient pas directement de mon code mais de son environnement, de la gestion des ressources, de la partie précompilée … que sais-je encore …
 
Quel protocole employer en pareil cas ?
Dans quelle direction chercher ?
Auriez-vous un début de piste à me suggérer ?
Comment vous y prendriez-vous ?
 
Sans le debugger je suis complètement démuni.
 
Merci pour votre aide.
 
Xuarac vous salue bien !

Reply

Marsh Posté le 01-03-2005 à 13:27:44   

Reply

Marsh Posté le 04-03-2005 à 01:38:44    

debugview + OutputDebugString()  
 
http://www.sysinternals.com/ntw2k/ [...] view.shtml

Reply

Marsh Posté le 04-03-2005 à 14:41:51    

Humm, ca n'a peut-etre rien a voir, mais je suis deja tombe sur une erreur de ce genre mais avec du visual studio.net
 
Chez moi, j'avais des fuites memoires avant meme l'entree dans le main de mon appli, chose que j'ai pu constater en utilisant le fabuleux logiciel boundchecker...
Evidement, en release, ces fuites se transformaient en crash violent...
 
Apres de lonnnnnnnngues recherche, le probleme venait finalement des options de compilations de certaines librairies incluses dans le projet, donc rien a voir avec mon code.
 
Je suis desole, je n'ai pas sous la main de visual donc je vais tenter de t'orienter dans la bonne voie!
 
En gros, dans les options de compilations d'un projet visual, tu as 4 possibilites differentes pour inclure les lib standard: as shared lib, as shared lib multithread, as ddl, as ddl multithread (de memoire ca doit etre ca)
 
Meme si ce reglage parait anodin, crois moi, si tu as du linkage statique ca change tout!
 
Donc, verifie si tu utilise des librairies statiques que celles-ci utilisent bien la meme option pour se linker avec les libs std, juste en corrigeant ca, j'ai resolu mon probleme a la base insolvable (d'autant plus lorsque tu ne possede que les binaires de tes libs...
 
En esperant t'avoir aide...


Message édité par mordicator le 04-03-2005 à 14:43:34
Reply

Marsh Posté le 10-03-2005 à 09:25:21    

Eurêka ! j'ai trouvé !!!
 
Après avoir défait progressivement toute mon application, classe par classe, fonction par fonction, j'ai enfin trouvé le bug.
Une saloperie !!!
 
Je suis le coupable !
J'avais ajouté, à la classe CMainFrame, une nouvelle fonction définie par "void OnActivate();", alors qu’existe dans cette classe la fonction membre "afx_msg void OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized );"
Cette dernière est la fonction associée au message WM_ACTIVATE.
 
Le mode debug est visiblement capable de distinguer la nuance à faire entre ces deux définitions, pas le mode release. Mon application déraillait bien après avoir exécuté cette fonction d’où la difficulté à circonscrire le problème.
 
Il m’a suffi de définir void Activate(); à la place de void OnActivate();
Deux lettres à retirer pour remettre sur les rails mon application.
 
C’est si simple quand on a trouvé l’aiguille dans la meule de foin !!!
 
Merci beaucoup à ceux qui ont tenté de m’aider.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed