IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

exception de premiere chance.. visual 2010


Sujet :

MFC

  1. #1
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut exception de premiere chance.. visual 2010
    Bonjour,

    J'ai converti un prog visualc++6 en projet visual 2010,
    un prog en MFC, et j'ai une
    Exception 0xC0000005: Violation lors de la lecture de l'emplacement 0xfeeefeee � la fermeture.
    Clairement, c'est un espace m�moire d�ja lib�r�.
    Ce que je cherche � savoir, c'est comment faire pour connaitre la variable mise en cause. Car, l'exception est lev�e dans atlsimpstr.h, la ou les variables sont normalement releas�es, mais il semble qu'elle est d�ja �t� releas�e.
    Hors, j'arrive pas � savoir de quelle variable CString il s'agit.
    Je cherche donc � savoir de quelle variable on parle..
    Comment faire..??
    J'ai regard� dans la pile des appels, mais je trouve rien de concluant.;
    et vu que j'utilse une tonne de CString..

    Merci de m'aider

  2. #2
    Membre �prouv�
    Avatar de TheGzD
    Homme Profil pro
    Ing�nieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : Ing�nieur/ Docteur en Informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par d�faut
    N'as-tu fais un usage "abusif" du GetBuffer d'un CString local � une m�thode/fonction ?

    Si tu utilises des pointeurs mets les � NULL apr�s lib�ration, �a peut parfois �viter bien des d�sagr�ments.

  3. #3
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut creusons, creusons..
    bon, j'en ai profit� pour refaire une verif des GetBuffer et releasebuffer, avec ajout du pointeur � NULL par pr�caution, bien que ca paraisse futil, vu que normalement la librairie g�re la d�sallocation des variables sur le tas...

    et le resultat n'est pas vraiment mieux, au moins, je sais que ca ne vient pas de ca..
    j'�tais habitu� � un certains nombre de bugs et d'imperfections sous vC6, mais bon , je les connaissais et on arrivait toujours � peu pr�s � s'en sortir.
    mais la , c'est vraiment d�routant.
    le bug se situe dans une fonction de atlsimpstr.h, donc sources systeme, ici.
    c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlsimpstr.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    struct CStringData
    {
    	IAtlStringMgr* pStringMgr;  // String manager for this CStringData
    	int nDataLength;  // Length of currently used data in XCHARs (not including terminating null)
    	int nAllocLength;  // Length of allocated data in XCHARs (not including terminating null)
    	long nRefs;     // Reference count: negative == locked
    	// XCHAR data[nAllocLength+1]  // A CStringData is always followed in memory by the actual array of character data
    
    	void* data() throw()
    	{
    		return (this+1);
    	}
    
    	void AddRef() throw()
    	{
    		ATLASSERT(nRefs > 0);
    		_AtlInterlockedIncrement(&nRefs);
    	}
    	bool IsLocked() const throw()
    	{
    		return nRefs < 0;
    	}
    	bool IsShared() const throw()
    	{
    		return( nRefs > 1 );
    	}
    	void Lock() throw()
    	{
    		ATLASSERT( nRefs <= 1 );
    		nRefs--;  // Locked buffers can't be shared, so no interlocked operation necessary
    		if( nRefs == 0 )
    		{
    			nRefs = -1;
    		}
    	}
    	void Release() throw()
    	{
    		ATLASSERT( nRefs != 0 );
    
    		if( _AtlInterlockedDecrement( &nRefs ) <= 0 )
    		{
    			pStringMgr->Free( this );   <==== ERREUR ICI		}
    	}
    	void Unlock() throw()
    	{
    		ATLASSERT( IsLocked() );
    
    		if(IsLocked())
    		{
    			nRefs++;  // Locked buffers can't be shared, so no interlocked operation necessary
    			if( nRefs == 0 )
    			{
    				nRefs = 1;
    			}
    		}
    	}
    };
    comme ca fait juste 3 jours que je suis pass� sous vc2010, j'ai trouv� comment charger les symboles d�taill�s, et finalement, dans la pile d'appels, la fonction qui provoque le probleme est appell�e juste apr�s la sortie du destructeur de la mainform.

    j'ai cette fonction pour finaliser ma mainform avnt destruction, tuer les threads, etc..
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CMainFrame::OnClose() 
    {
        // code divers et variés..
     
       // fermeture de la frame principale MDI
         CMDIFrameWnd::OnClose();
    }
    l'appel � la fonction se fait imm�diatement apr�s ca..
    en creusant un peu, je m'apercois que le hwnd est d�ja � 0xfeeefeee,
    normal finalement, puisque je viens d'appeler CMDIFrameWnd::OnClose(); qui justement, detruit la fenetre..
    finalement, en tracant, avec F11, aussitot apr�s, je tombe sur
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    // Destructor
    	~CStringT() throw()
    	{
    	}
    dans atlsimpstr.h, sans autre forme de proc�s..
    c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlsimpstr.h
    d'autant plus bizarre que j'ai pas demand� le support ATL dans le projet original..
    qui renvoie directement au noeud du probleme
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    ~CSimpleStringT() throw()
    	{
    		CStringData* pData = GetData();
    		pData->Release();
    	}
    et la je m'apercois que pData est egal � 0xfeeefeee ..
    bad news, j'ai toujours pas compris d'ou ca vient ..

  4. #4
    Membre �prouv�
    Avatar de TheGzD
    Homme Profil pro
    Ing�nieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : Ing�nieur/ Docteur en Informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par d�faut
    Il faudrait voir ton code pour t'en dire plus.

    A mon avis tu as un probl�me avec un des attributs de ta classe qui a lui-m�me instanci� un CString.

  5. #5
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut bon, ben voila..
    oui, � force de faire le morpion, j'ai enfin trouv� le probl�me, c'�tait moi.. comme d'hab.. on veut trop bien faire, tiens, ce pointeur, je l'ai pas d�sallou�, ca c'est pas bien.
    allez, hop, un petit delete..
    sauf que c'�tait sur une classe instanci�e sur le tas.
    donc, le gestionnaire a fait son travail, sauf que la reference �tait d�ja caduque..
    bon, le cot� positif, c'est que j'ai cherch� et utilis� des outils un peu plus pouss�s pour tracer jusqu'au bout..
    windbg par exemple, du debugging tools for windows.
    en cherchant un peu on peut recuperer les fichiers .mdmp ou .hdmp r�sultants d'un crash programme, dans les journaux windows, et windbg permet d'explorer la pile des appels au moment du crash, tr�s instructif.
    pour ceux qui ne connaitraient pas ou qui n'en ont pas encore besoin,
    c'est la.

    appeller windbg avec en argument le fichier .mdmp ou .hdmp

    windbg -z fichierdump.mdmp
    dans la fenetre commande en bas, taper cette commande:
    !analyze -v
    ca remet tout en ordre, et la pile d'appel est accessible proprement.
    tout devient limpide.
    pour charger les symboles, voir ici http://support.microsoft.com/kb/311503

    j'ai trouv� � partir de cette discussion.
    http://social.msdn.microsoft.com/For...0-83e3de8d0972

    voila, j'ai encore pris le mur, mais je m'en sors plus fort.

  6. #6
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    j'utilise aussi windbg comme ceci:
    dans les options de link d�bogage : je laisse debug � oui.

    en cas de plantage je r�cup�re : les deux fichiers .mdmp / hdmp.

    j'ouvre le fichier .mdmp.

    puis CTRL+S pour donner le chemin de mon fichier symbols (.pdb) de mon application ce qui correspond au r�pertoire release de mon programme.
    je clic sur l'option reload de la fen�tre.
    et la miracle on voit la portion de code en clair responsable de l'erreur ...

  7. #7
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut fichiers mdmp
    Citation Envoy� par farscape Voir le message
    salut,
    j'utilise aussi windbg comme ceci:
    dans les options de link d�bogage : je laisse debug � oui.
    en cas de plantage je r�cup�re : les deux fichiers .mdmp / hdmp.
    ben justement, le plantage se produit sur site, et c'est pas bien clair dans ma tete le processus de generation des fichiers dmp. vu qu'il faut que je puisse l'expliquer aux utilisateurs pour pouvoir le recuperer.
    est-ce que ca se genere tout seul et � quelle condition ou est-ce qu'il faut faire une action sp�ciale lors du crash ou juste apr�s pour avoir ces fichiers.??
    merci d'avance..

  8. #8
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut ,
    Tout le probl�me est la ! : les fichiers sont conserv�s tant que le message reste ouvert ,si l'utilisateur ferme le message ou active ne pas envoyer c'est mort les fichiers sont supprim�s .
    dans mon cas je suis sauv� car l'application tourne en terminal serveur et les erreurs remontent sur la console de l'administrateur ...

    une possibilit� que je n'ai pas eu le temps d'essayer , c'est de d�sactiver dr watson pour voir si les fichiers sont conserv�s :

    http://support.microsoft.com/kb/188296

  9. #9
    Membre tr�s actif
    Profil pro
    D�veloppeur ind�pendant
    Inscrit en
    Ao�t 2004
    Messages
    374
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur ind�pendant
    Secteur : Transports

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 374
    Par d�faut ben voila, c'est le noeud du probleme
    comme je disais dans le titre, c'est le noeud du probleme..
    peut on configurer un vista ou un seven ou un xp pour qu'il genere automatiquement les fichiers de dump d'une application qui crash et en conserve les fichiers. ecraser les fichiers, pas top. on peut avoir plusieurs causes qui se d�clenchent pas en m�me temps.
    vu la taille des applis, pouvoir d�buguer une application s'executant � distance est primordial.
    un exemple bete..
    j'avais un plantage juste sur la generation d'un message EDI, sur le poste client, � calais, alors que je suis � bordeaux..
    et ben un dump m'a beaucoup aid� � comprendre que c'�tait une sombre histoire de droits d'ecriture sur un repertoire windows. juste parcequ'il avait �t� cr�� avec un autre compte.
    mais la n'est pas le probleme.
    dans ce cas, j'ai pu comprendre avec une session teamviewer, comme si j'�tais devant. mais dans le cas d'installation non connect�es au net, on fait comment??
    quelles consignes � donner ou quel reglage mettre en oeuvre dans le syst�me ou lors de la compil pour �tre sur de generer ces fichiers dump..?
    et la, je parle pas que pour moi, d'autres pourraient �tre interress�s.
    les infos qu'on trouve sont trop rares, repetent les m�mes docs vides de sens, et ne proposent pas vraiment de solutions concretes, contextuelles et verifiables..
    d'ailleurs en passant, ca devrait constituer un chapitre � part enti�re de la faq visualc++, c'est vraiment un truc � se taper la tete contre les murs..

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Masquer Exception de premi�re chance
    Par Ange44 dans le forum VC++ .NET
    R�ponses: 2
    Dernier message: 04/10/2010, 13h09
  2. Exception de premi�re chance
    Par MohEllayali dans le forum C++
    R�ponses: 2
    Dernier message: 04/03/2009, 11h29
  3. Message d'Exception de Premiere Chance ?
    Par Danyel dans le forum VB.NET
    R�ponses: 1
    Dernier message: 29/05/2008, 14h20
  4. Exception de premi�re chance
    Par Oh-Dae-Su dans le forum C++
    R�ponses: 6
    Dernier message: 15/05/2008, 14h17
  5. Exception de premi�re chance
    Par oodini dans le forum C++
    R�ponses: 10
    Dernier message: 25/09/2007, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo