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

Visual C++ Discussion :

Utiliser le debugger Visual C++ 2008


Sujet :

Visual C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut Utiliser le debugger Visual C++ 2008
    Bonjour à tous,

    J'ai une application qui fonctionne très bien en compilation release mais quand je la lance dans mon debuggueur, j'ai des messages d'erreurs inquiétants, bien qu'ils n'empêchent pas le programme de fonctionner:

    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77010000.
    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77020000.
    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77030000.
    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77040000.
    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77050000.
    Exception de première chance à 0x100926f6 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x77060000.
    et ainsi de suite jusqu'à :
    Exception de première chance à 0x01983f15 dans Reader.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x7c7f0000.
    Si je debuggue pas à pas, ces erreurs surviennent toutes lors de l'appel à cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reader.MainWindow=CreateWindowEx(0, "Reader"," Reader", WS_POPUP|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,0,0,0,0,NULL,NULL,hInstance,NULL);
    mais avant le code géré au niveau du WM_CREATE.

    Le debuggueur me désigne cette ligne 105 du fichier malloc.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return HeapAlloc(_crtheap, 0, size ? size : 1);
    Mais comment puis-je savoir ce qui est à corriger dans mon code?

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Il suffit d'attraper l'exception concernée !

    Tu peux déjà lire ceci : http://blogs.msdn.com/b/davidklinems...12/438061.aspx

    Ensuite, dans VS, il te suffit d'aller dans Debug -> Exceptions puis de cocher l'exception concernée, en l'occurence "Access violation", qui est une "WIN32 exception".

    Relance ton programme en mode debug, et le débugueur s'arrêtera lorsque l'exception est lancée.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Relance ton programme en mode debug, et le débugueur s'arrêtera lorsque l'exception est lancée.
    Salut,

    C'est bien ce que j'ai fait, et justement le debuggueur s'arrêtait dans le fichier malloc.c.
    J'ai finalement compris que ca venait de mes chaînes de caractères passées au CreateWindow, car en les passant à NULL, le debuggueur passe alors le CreateWindow sans relever d'exception.

    J'en déduis qu'il n'est pas recommandé de directement passer une chaîne de cette facon, sans la déclarer au préalable?
    Pourquoi est ce que passer une chaîne de la sorte entraîne une allocation dynamique, je pensais que le compilateur transformait ces chaînes de caractères en allocation statique?

    Je vais de ce pas chercher de la lecture pour mieux comprendre comment utiliser un debuggueur.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Une fois le débugueur arrêté, tu peux facilement récupérer plein d'infos :
    - La callstack va te montrer toute la pile d'appel et permet de remonter facilement jusqu'au code concerné
    - Tu peux t'arrêter sur CreateWindow et faire une exécution pas à pas pour voir ce qui se passe.
    - Tu peux poser des watchs pour surveiller les variables dont tu as besoin

    Quant tu maîtriseras un peu tout ça, tu localiseras très vite les problèmes !

  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 pointeur
    toutes tes chaines, meme statiques, sont referencées par un pointeur.
    si tu crée juste la variable, sans l'initialiser, tu n'as aucune garantie de ce qu'elle va contenir aprés création.
    car l'espace mémoire occupé n'et pas nettoyé lors de la creation, sauf si ta variable est par exemple, un CString, qui est un objet avec une procedure d'initialisation..
    donc, initialisation des variables à l'état initial obligatoire.
    on peut tout faire en c/c++, mais le revers de la médaille, c'est qu'il faut tout faire..

Discussions similaires

  1. Pb utilisation Split avec Visual basic 2008 Express
    Par duarep dans le forum VB.NET
    Réponses: 14
    Dernier message: 26/08/2013, 17h29
  2. comment utilise paradiseo avec visual studio 2008
    Par houamehob dans le forum Visual Studio
    Réponses: 0
    Dernier message: 25/06/2011, 12h24
  3. Réponses: 0
    Dernier message: 01/03/2011, 09h32
  4. Problème avec le debugger Visual Studio 2008
    Par Zouch-K dans le forum Visual C++
    Réponses: 2
    Dernier message: 02/04/2010, 14h13
  5. Utilisation dll - visual studio 2008 - c++
    Par >-[]-Fab-[]-< dans le forum Windows
    Réponses: 9
    Dernier message: 22/05/2008, 15h53

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