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 :

[MFC VC 2005] Voudrais bien débuguer mais peux pas.


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut [MFC VC 2005] Voudrais bien débuguer mais peux pas.
    Bonjour à tous,

    mon application fonctionne parfaitement en mode Debug, en mode Release avec debug, mais pas en Release sans debug.
    Lors d'un clic sur un bouton, j'ai une exception dont vous trouverez l'image jointe.
    Bien que j'ai lu le très complet tuto sur le debogueur de Visual Studio, comme on est en Release, il me renvoie au code désassemblé pur, sans aucune référence, qui ne m'est d'aucune utilité....

    Comme résoudre ça ?
    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    C'est le genre de cas où il faut passer par du log

  3. #3
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    Bonjour,

    s'il n'y a pas de solution avec le débogueur, j'en passerai par là

    au passage, peux-tu stp m'expliquer la différence entre Debug et Release avec debug ?
    est-ce juste la version des librairies qui change ?

    Philippe

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Philippe320 Voir le message
    au passage, peux-tu stp m'expliquer la différence entre Debug et Release avec debug ?
    Non
    Non pas que je ne veuille pas, mais je n'ai quitté que très récemment Visual 6, donc j'ai pas encore tout exploré.
    A priori, je dirais :
    1/ Debug : ton code est en débug + DLL MS en débug
    2/ Release + debug : ton code est en débug + DLL MS en release
    3/ Full Release : ton code est en release + DLL MS en release.
    Mai ce ne sont que des à-priori...

    [EDIT] : En Release (avec ou sans information de debug); il me semble que les optimisations sont appliquées à ton code. Ce qui n'est pas le cas en mode debug.

  5. #5
    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,
    c'est quoi qui est debug et en release ?

  6. #6
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut Difference Debug/Release
    Lorsque l'option Debug est activée : les informations de debug sont ajoutées dans le code et la mémoire est initialisée ( pointeurs nulls .... )

    Donc si ca ne plante qu'en release , il faut aller voir du coté d'une variable non initialisée, mais utilisée quand même, ou bien d'un debordement memoire , non visible en debug puisque la memoire alloue de l'espace en plus pour les infos de debug

    Voila, reponse tres rapide, mais c'est par la qu'il faut regarder

    Benoit

  7. #7
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    A l'attention de Farscape,

    salut,
    ce qui est en Debug ou Release, c'est l'exe qui sort de la compilation,
    en fonction du réglage de "Active solution configuration"
    (ComboBox en haut)
    mais j'imagine que ce n'est pas exactement ce que tu me demandais

    Philippe

  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
    ben tu as dis que tu as debug et du release mixé,
    le programme est debug release ?
    l'autre partie je suppose que c'est une lib ?

  9. #9
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    désolé Farscape , mais je ne te suis pas du tout:
    de quelle autre partie parles-tu et de quelle lib ?

    je souhaite que mon application tourne en version release
    pour l'instant, elle tourne parfaitement en version debug, et en version release+debug.
    mais en release, elle plante ...
    d'après le conseil de benoitra, il n'y a que le log pour suivre ce qui se passe en release ; j'espèrais une autre solution avec Studio 2005

    Philippe

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une version debug, je vois ce que c'est, une version release, je vois ce que c'est aussi.

    Par contre, une version debug+release, je ne vois vraiment pas, il faut que tu expliques ce que tu veux dire par là.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par benoitra Voir le message
    Lorsque l'option Debug est activée : les informations de debug sont ajoutées dans le code et la mémoire est initialisée ( pointeurs nulls .... )
    Euh, ce n'est plus le cas depuis un moment. En debug, les non initialisés sont ... non initialisés (les pointeurs ne se retrouvent pas à NULL ni les int à 0!)

    Citation Envoyé par Philippe320 Voir le message
    d'après le conseil de benoitra, il n'y a que le log pour suivre ce qui se passe en release
    Domage pour moi et ma première réponse...

    Citation Envoyé par ram-0000 Voir le message
    Par contre, une version debug+release, je ne vois vraiment pas, il faut que tu expliques ce que tu veux dire par là.
    Tu peux compiler en mode release avec les informations de debug. De ce que j'en comprends tu bénéficie de toutes les optimisations positionnées pour le mode release mais des infos de debug sont quand même rajoutées. J'avoue avoir aussi été surpris par ce mode mais ça existe...
    Donc ce que dit Philippe, pour son programme :
    -> Mode débug (1): pas d'optimisation + infos debug = OK
    -> Mode Release + debug (2): optimisations + infos debug = OK
    -> Mode Release - debug (3): optimisations sans infos debug = KO.
    Je penses que pour les DLL MFC : (1) ça doit être les versions debug, (2) et (3) ça doit être les versions release sans info de debug (?).

    Les origines du problème... je ne sais pas. Je ne vois que le log pour s'en sortir.

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Tu peux compiler en mode release avec les informations de debug. De ce que j'en comprends tu bénéficie de toutes les optimisations positionnées pour le mode release mais des infos de debug sont quand même rajoutées. J'avoue avoir aussi été surpris par ce mode mais ça existe...
    Et dans ce mode, tu peux debugger, entrer dans une fonction, afficher une variable, poser un breakpoint ? (vraie question)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Sur ton code oui. En revanche, il peut y avoir une divergence entre le code que tu as sous les yeux et celui qui est exécuté (à cause des optimisations).
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // dans ma fonction 
    DWORD dw_erreur = GetLastError();
    // puis dw_erreur n'est plus utilisé
    En debug + debug, tu as accès à dw_erreur.
    En release + info de debug, il y a de forte chance que dw_erreur soit squizzé par l'optimisation.

  14. #14
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    très juste , tu m'as indiqué le log en premier , désolé
    rendons à César .....

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En Release Sans Debug, tu dis que tu n'as droit qu'à de l'assembleur.
    Mais que dit la fenêtre "Call Stack" du debugger?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    intéressant comme question :
    j'ai :
    <flèche jaune>ntdll.dll!7c9469aa()

    donc, ce n'est pas mon code qui plante directement, mais ntdll.dll !
    sais-tu ce que fait cette dll ?

    d'autre part, j'ai tracé mon code avec un log
    j'ai deux cas différents d'apparition de cette exception,
    mais qui correspondent à chaque fois à une sortie audio
    1er cas : en lisant un message en synthèse vocale
    2ème cas : en lisant un bout de mp3 intégré dans une ressource du l'application

    l'exception arrive de manière erratique (ça marche 4 fois et plante à la 5ème ou à la 8ème fois)

    qu'en pensez-vous ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est toute la call stack qu'il faut regader, pas seulement la frame la plus profonde.
    Aussi, sous Visual 2005, cette option peux t'aider:
    http://msdn.microsoft.com/en-us/library/b8ttk8zy.aspx
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    on progresse
    alors, j'ai installé une fois pour toutes les symbols grace à ton lien
    et j'ai tout ça dans la Call Stack
    ntdll.dll!_RtlAllocateHeap@12() + 0x16bc bytes
    TélécommandeWMP.exe!0042c27d()
    [Frames below may be incorrect and/or missing, no symbols loaded for TélécommandeWMP.exe]
    oleaut32.dll!_SysStringLen@4()
    kernel32.dll!_WideCharToMultiByte@32()
    TélécommandeWMP.exe!004233cf()
    TélécommandeWMP.exe!00403027()
    TélécommandeWMP.exe!00404589()
    TélécommandeWMP.exe!004026e1()
    user32.dll!_BNCalcRect@20() + 0x428 bytes
    TélécommandeWMP.exe!00407c41()
    user32.dll!_InternalCallWinProc@20() + 0x28 bytes
    user32.dll!_UserCallDlgProcCheckWow@32() + 0xb5 bytes
    user32.dll!_DefDlgProcWorker@20() + 0x7f bytes
    user32.dll!_DefDlgProcA@16() + 0x22 bytes
    user32.dll!_InternalCallWinProc@20() + 0x28 bytes
    user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
    user32.dll!_DispatchClientMessage@20() + 0x4d bytes
    user32.dll!___fnDWORD@4() + 0x24 bytes
    ntdll.dll!_KiUserCallbackDispatcher@12() + 0x13 bytes
    user32.dll!_DefDlgProcA@16()
    user32.dll!_DispatchClientMessage@20()
    user32.dll!_NtUserMessageCall@28() + 0xc bytes
    user32.dll!_SendMessageW@16() + 0x49 bytes
    user32.dll!_xxxButtonNotifyParent@8() + 0x41 bytes
    user32.dll!_xxxBNReleaseCapture@8() + 0x21141 bytes
    user32.dll!_ButtonWndProcWorker@20() + 0xc5c bytes
    user32.dll!_ButtonWndProcA@16() + 0x4c bytes
    user32.dll!_InternalCallWinProc@20() + 0x28 bytes
    user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
    user32.dll!_DispatchMessageWorker@8() + 0xdc bytes
    user32.dll!_DispatchMessageW@4() + 0xf bytes
    user32.dll!_IsDialogMessageW@8() + 0xdb bytes
    user32.dll!_DialogBox2@16() + 0xc1 bytes
    user32.dll!_InternalDialogBox@24() + 0xb6 bytes
    user32.dll!_DialogBoxIndirectParamAorW@24() + 0x36 bytes
    user32.dll!_DialogBoxIndirectParamA@20() + 0x1b bytes
    TélécommandeWMP.exe!0040d3be()
    TélécommandeWMP.exe!0040f3ec()
    TélécommandeWMP.exe!0040f326()
    l'exception semble apparaitre dans RtlAllocateHeap@12()
    peux-tu m'aider à décrypter ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pas facile sans les symboles de ton exe.
    Mais si j'ai bien compris, si tu génères les symboles même en Release, tu n'arrives pas à reproduire le plantage, c'est ça?

    PS: Essaie au moins de désactiver certaines optimisations de ton programme:
    1. Frame pointer omission (pour éviter de trop abimer la stack trace)
    2. Merge redundant COMDats (indispensable de le désactiver, ou bien la stack trace risque d'être FAUSSE par endroits.

    Tu peux aussi désactiver l'inlining. En clair, désactiver morceau-par-morceau les optimisations, plutôt que toutes d'un coup.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 23
    Dernier message: 14/09/2010, 18h15
  2. Réponses: 3
    Dernier message: 04/07/2007, 16h06
  3. Réponses: 10
    Dernier message: 06/03/2006, 10h15
  4. [Firebird] on ne peux pas l'exploiter avec Delphi 2005 ??
    Par Harry dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/04/2005, 11h40

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