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

C++ Discussion :

[Débutant]Problème en mode Debug Seulement


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut [Débutant]Problème en mode Debug Seulement
    Bonjour,
    J'ai un petit problème avec ce code
    l'application marche super bien en mode realese mais une fois sur Debug
    1. ça plante avec l'erreur suivante :


    Exception non gérée à 0x7c911230 dans BackGround_ForeGround.exe: Point d'arrêt utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!HeapValidate(_crtheap, 0, NULL))
            {
                if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
                {
                    _doserrno = ERROR_CALL_NOT_IMPLEMENTED;
                    errno = ENOSYS;
                }
                else
                    retcode = _HEAPBADNODE;
            }
            return retcode;
    }



    et mon code le voilà :

    j'ai mis en rouge la ligne où je pense il fait planter l'appli parce que si je met cette ligne en commentaire ça marche, mais avec des resultats bizarre à la fin voilà.
    Merci.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Ca sent le dépassement de tableau a plein nez.
    La ligne que tu as surligné semble confimer mon idée.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    merci pour ta reponse mais je vois pas où? et ça dure depuis déjà 2 semaines

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    rajoute des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    assert(i<taille_du_tableau_index);
    assert(index[i]<taille_du_tableau_traj);
    d'ailleurs, si tu utilisais des vector, tu aurais surement moins de problèmes. en tout cas, pour te consoler, dis toi qu'il vaut mieux avoir un problème uniquement en mode debug plutôt en mode release

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par PierroElMito Voir le message
    rajoute des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    assert(i<taille_du_tableau_index);
    assert(index[i]<taille_du_tableau_traj);
    d'ailleurs, si tu utilisais des vector, tu aurais surement moins de problèmes. en tout cas, pour te consoler, dis toi qu'il vaut mieux avoir un problème uniquement en mode debug plutôt en mode release
    Merci mais dit moi stp j'ajoute où exactement les assert();?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    entre la ligne 47 et la ligne 48, ça te permettra d'avoir un message d'erreur quand tu essayeras d'accéder à un élément en dehors du tableau. mais il y a surement d'autres endroits ou ça pourrait être utile...

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par PierroElMito Voir le message
    entre la ligne 47 et la ligne 48, ça te permettra d'avoir un message d'erreur quand tu essayeras d'accéder à un élément en dehors du tableau. mais il y a surement d'autres endroits ou ça pourrait être utile...
    Déjà mis mais ça change rien malheuresement j'ai tt le temps la meme erreur

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbre_position[traj[index[i]].position]++;
    tu peux aussi mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(traj[index[i]].position<8);

  9. #9
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Est ce que tu utilises un IDE ou un debugger? Si c'est le cas exécute ton code pas à pas pour être sur de l'endroit où se situe l'erreur

  10. #10
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par PierroElMito Voir le message
    avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbre_position[traj[index[i]].position]++;
    tu peux aussi mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(traj[index[i]].position<8);
    je vais voir demain je ne suis plus au taf

  11. #11
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par befalimpertinent Voir le message
    Est ce que tu utilises un IDE ou un debugger? Si c'est le cas exécute ton code pas à pas pour être sur de l'endroit où se situe l'erreur
    jtravail avec Visual c++ 2003.Pas à pas c ce que j'ai fait pendant une semaine comme j'ai déjà dis ça coince au niveau de la fonction Ecriture_Fichier_Trajectoire surtout à la ligne 50

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Que contient la pile d'appels ? (call stack)

  13. #13
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    bonjour,
    le truc bizarre si je mets
    aavnt la ligne 50 ça marche très bien et je vois pas pK?

  14. #14
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Que contient la pile d'appels ? (call stack)
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     	ntdll.dll!7c911230() 	
     	ntdll.dll!7c96db9c() 	
     	ntdll.dll!7c97c45d() 	
     	ntdll.dll!7c97d098() 	
     	ntdll.dll!7c970ae7() 	
     	kernel32.dll!7c85e9cf() 	
    >	BackGround_ForeGround.exe!_heapchk()  Ligne 104 + 0x10	C
     	BackGround_ForeGround.exe!_CrtCheckMemory()  Ligne 1500 + 0x5	C
     	BackGround_ForeGround.exe!_heap_alloc_dbg(unsigned int nSize=48, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Ligne 346 + 0x5	C
     	BackGround_ForeGround.exe!_nh_malloc_dbg(unsigned int nSize=48, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Ligne 260 + 0x15	C
     	BackGround_ForeGround.exe!_malloc_dbg(unsigned int nSize=48, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Ligne 176 + 0x1b	C
     	BackGround_ForeGround.exe!operator new(unsigned int nSize=48)  Ligne 339 + 0xf	C++
     	BackGround_ForeGround.exe!std::_Allocate(unsigned int _Count=48, char * __formal=0x00000000)  Ligne 34 + 0x9	C++
     	BackGround_ForeGround.exe!std::allocator<char>::allocate(unsigned int _Count=48, const void * __formal=0x00000000)  Ligne 112 + 0xb	C++
     	BackGround_ForeGround.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy(unsigned int _Newsize=36, unsigned int _Oldlen=27)  Ligne 1202 + 0x11	C++
     	BackGround_ForeGround.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow(unsigned int _Newsize=36, bool _Trim=false)  Ligne 1232	C++
     	BackGround_ForeGround.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::append(const char * _Ptr=0x369f2290, unsigned int _Count=9)  Ligne 283 + 0x20	C++
     	BackGround_ForeGround.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::append(const char * _Ptr=0x369f2290)  Ligne 294	C++
     	BackGround_ForeGround.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator+=(const char * _Ptr=0x369f2290)  Ligne 244	C++
     	BackGround_ForeGround.exe!CTelemetre::Calcul_Vitesse(CVehicule * traj=0x10a2e268, int c1=12, int c2=13)  Ligne 1316	C++
     	BackGround_ForeGround.exe!CTelemetre::Ecriture_Fichier_Trajectoire(ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > > fichier_resultat={...})  Ligne 1436 + 0x3f	C++
     	BackGround_ForeGround.exe!CTelemetre::Go()  Ligne 414	C++
     	BackGround_ForeGround.exe!_AfxDispatchCmdMsg(CCmdTarget * pTarget=0x10117dc0, unsigned int nID=4, int nCode=0, void (void)* pfn=0x004b4136, void * pExtra=0x00000000, unsigned int nSig=53, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000)  Ligne 89	C++
     	BackGround_ForeGround.exe!CCmdTarget::OnCmdMsg(unsigned int nID=4, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000)  Ligne 396 + 0x27	C++
     	BackGround_ForeGround.exe!CDialog::OnCmdMsg(unsigned int nID=4, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000)  Ligne 88 + 0x18	C++
     	BackGround_ForeGround.exe!CWnd::OnCommand(unsigned int wParam=4, long lParam=4130564)  Ligne 2542	C++
     	BackGround_ForeGround.exe!CWnd::OnWndMsg(unsigned int message=273, unsigned int wParam=4, long lParam=4130564, long * pResult=0x0012f38c)  Ligne 1751 + 0x1c	C++
     	BackGround_ForeGround.exe!CWnd::WindowProc(unsigned int message=273, unsigned int wParam=4, long lParam=4130564)  Ligne 1737 + 0x1e	C++
     	BackGround_ForeGround.exe!AfxCallWndProc(CWnd * pWnd=0x10117dc0, HWND__ * hWnd=0x00320702, unsigned int nMsg=273, unsigned int wParam=4, long lParam=4130564)  Ligne 241 + 0x1a	C++
     	BackGround_ForeGround.exe!AfxWndProc(HWND__ * hWnd=0x00320702, unsigned int nMsg=273, unsigned int wParam=4, long lParam=4130564)  Ligne 387	C++
     	user32.dll!7e398724() 	
     	user32.dll!7e398806() 	
     	user32.dll!7e39b88b() 	
     	user32.dll!7e39b8f3() 	
     	user32.dll!7e3cfe95() 	
     	user32.dll!7e3c658d() 	
     	user32.dll!7e3a783f() 	
     	user32.dll!7e3bb06a() 	
     	user32.dll!7e398724() 	
     	user32.dll!7e398806() 	
     	user32.dll!7e39c623() 	
     	user32.dll!7e39e8e5() 	
     	BackGround_ForeGround.exe!CWnd::DefWindowProcA(unsigned int nMsg=514, unsigned int wParam=0, long lParam=1048612)  Ligne 1022 + 0x20	C++
     	BackGround_ForeGround.exe!CWnd::WindowProc(unsigned int message=514, unsigned int wParam=0, long lParam=1048612)  Ligne 1738 + 0x1a	C++
     	BackGround_ForeGround.exe!AfxCallWndProc(CWnd * pWnd=0x10f2cc18, HWND__ * hWnd=0x003f0704, unsigned int nMsg=514, unsigned int wParam=0, long lParam=1048612)  Ligne 241 + 0x1a	C++
     	BackGround_ForeGround.exe!AfxWndProc(HWND__ * hWnd=0x003f0704, unsigned int nMsg=514, unsigned int wParam=0, long lParam=1048612)  Ligne 387	C++
     	user32.dll!7e398724() 	
     	user32.dll!7e398806() 	
     	user32.dll!7e3989bd() 	
     	user32.dll!7e398a00() 	
     	user32.dll!7e3ae0a7() 	
     	user32.dll!7e3bc6bb() 	
     	BackGround_ForeGround.exe!CWnd::IsDialogMessageA(tagMSG * lpMsg=0x0015f840)  Ligne 200	C++
     	BackGround_ForeGround.exe!CWnd::PreTranslateInput(tagMSG * lpMsg=0x0015f840)  Ligne 4505	C++
     	BackGround_ForeGround.exe!CDialog::PreTranslateMessage(tagMSG * pMsg=0x0015f840)  Ligne 83	C++
     	BackGround_ForeGround.exe!CWnd::WalkPreTranslateTree(HWND__ * hWndStop=0x000706d0, tagMSG * pMsg=0x0015f840)  Ligne 3121 + 0x12	C++
     	BackGround_ForeGround.exe!AfxInternalPreTranslateMessage(tagMSG * pMsg=0x0015f840)  Ligne 238 + 0x12	C++
     	BackGround_ForeGround.exe!CWinThread::PreTranslateMessage(tagMSG * pMsg=0x0015f840)  Ligne 795 + 0x9	C++
     	BackGround_ForeGround.exe!AfxPreTranslateMessage(tagMSG * pMsg=0x0015f840)  Ligne 257 + 0xf	C++
     	BackGround_ForeGround.exe!AfxInternalPumpMessage()  Ligne 183 + 0x18	C++
     	BackGround_ForeGround.exe!CWinThread::PumpMessage()  Ligne 916	C++
     	BackGround_ForeGround.exe!AfxPumpMessage()  Ligne 195 + 0xb	C++
     	BackGround_ForeGround.exe!CWnd::RunModalLoop(unsigned long dwFlags=4)  Ligne 4559 + 0x5	C++
     	BackGround_ForeGround.exe!CDialog::DoModal()  Ligne 533 + 0xc	C++
     	BackGround_ForeGround.exe!CBackGround_ForeGroundApp::InitInstance()  Ligne 133 + 0xb	C++
     	BackGround_ForeGround.exe!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151ef3, int nCmdShow=1)  Ligne 39 + 0xb	C++
     	BackGround_ForeGround.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151ef3, int nCmdShow=1)  Ligne 25	C++
     	BackGround_ForeGround.exe!WinMainCRTStartup()  Ligne 251 + 0x32	C
     	kernel32.dll!7c816fd7()

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    C'est donc bien une vérification du tas qui plante, ce qui en effet peut être la conséquence d'un débordement de buffer.

    Regarde dans la sortie du debugger: Tu devrais avoir plus d'informations sur ce qui n'est pas bon dans le tas...

  16. #16
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est donc bien une vérification du tas qui plante, ce qui en effet peut être la conséquence d'un débordement de buffer.

    Regarde dans la sortie du debugger: Tu devrais avoir plus d'informations sur ce qui n'est pas bon dans le tas...
    oui jsais bien mais où!!!

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Dans la fenêtre se sortie (Output).

  18. #18
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    bonjour,
    toujours pas de solution?!!

  19. #19
    screetch
    Invité(e)
    Par défaut
    tu peux utiliser la fonction de visual
    _crtSetDbgFlag (http://msdn2.microsoft.com/en-us/lib...cs(VS.71).aspx)

    notamment grace a _CRTDBG_CHECK_ALWAYS_DF qui va verifier le tas apres chaque alloc/free, te permettant de trouver celui qui plante.

    par defaut le tas est verifie toute les 1024 operations, ce qui rend la recherche difficile ^^

    tu peux soit le mettre au tout debut du programme (_crtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF) direct dans main) ou meme, plus malin, un peu avant que ca plante, puisque sinon ca ralentit beaucoup le programme

  20. #20
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par screetch Voir le message
    tu peux utiliser la fonction de visual
    _crtSetDbgFlag (http://msdn2.microsoft.com/en-us/lib...cs(VS.71).aspx)

    notamment grace a _CRTDBG_CHECK_ALWAYS_DF qui va verifier le tas apres chaque alloc/free, te permettant de trouver celui qui plante.

    par defaut le tas est verifie toute les 1024 operations, ce qui rend la recherche difficile ^^

    tu peux soit le mettre au tout debut du programme (_crtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF) direct dans main) ou meme, plus malin, un peu avant que ca plante, puisque sinon ca ralentit beaucoup le programme
    merci bcp j'ai mis seulement cette fonction juste avant la ligne en rouge et tout marche maintenant nickel merci.

Discussions similaires

  1. Problème en mode Debug
    Par Dr.id0 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 21/10/2010, 16h37
  2. Problème Eclipse mode debug boutons désactivés
    Par Tanebisse dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/04/2009, 10h10
  3. Problème en mode Debug Visual Studio-Objet COM
    Par TheBridge dans le forum C#
    Réponses: 5
    Dernier message: 10/09/2008, 23h24
  4. Problèmes en mode Debug
    Par pracede2005 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/05/2007, 16h29
  5. [Débutante] Compréhension programme - mode debug
    Par bolo dans le forum Assembleur
    Réponses: 14
    Dernier message: 07/01/2005, 18h33

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