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 :

VC++6: plantage OnPaint()


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut VC++6: plantage OnPaint()
    Salut!

    Voila, j'ai identifie un probleme qui semble provenir de la fonction OnPaint d'un Dialog "contenu" dans un objet CTabCtrl. Lorsque l'appli se lance et que je ne fais rien, pas de probleme ca demarre. Par contre lorsque je bouge une autre fenetre par dessus, la fonction OnPaint est appelee, et la ca plante. Le "call stack" de visual me donne une adresse incoherente (style 0xffffff90()). J'ai bien verifie que le plantage provient de l'appel a OnPaint, et en particulier de l'instruction
    Si je ne laisse QUE cette ligne dans OnPaint, alors ca plante quand meme. J'ai bien essaye de faire un try...catch pour voir si une exception etait envoyee, mais non, ca plante toujours de la meme maniere...

    Quelqu'un pourrait-il m'aiguiller?... (c'est pas critique, mais c'est agacant)

    Merci d'avance. GTreize.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Avec la callstack, vous devez avoir le code source de chaque "frame" dans celle-ci.
    Pouvez-vous nous donner le code source de la dernière "frame".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Avec la callstack, vous devez avoir le code source de chaque "frame" dans celle-ci.
    Pouvez-vous nous donner le code source de la dernière "frame".
    Qu'est-ce que vous appelez "code source de la dernière "frame""?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Quand l'application plante, dans la fenêtre "Call Stack" de VS, il y a un tableau remplis ligne par ligne par les méthodes en cours d'exécution dans le thread courant. La première ligne contient l'endroit où c'est produit le problème, la deuxième ligne contient la ligne qui a appelée la fonction ou méthode où c'est produit le problème, la 3ème ligne la ligne qui à appeler la fonction qui a elle même appelée la fonction ou méthode, la 4ème ainsi de suite.

    En cliquant sur la première ligne, VS devrait ouvrir le fichier de code source et sélectionné la ligne où c'est produit le problème.

    Il y a de grande chance que cela soit dans le code source des MFC. Indiquez nous la ligne et le fichier indiqué par VS.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par Gorgo13 Voir le message
    Si je ne laisse QUE cette ligne dans OnPaint, alors ca plante quand meme. J'ai bien essaye de faire un try...catch pour voir si une exception etait envoyee, mais non, ca plante toujours de la meme maniere...

    Oui il faut examiner la pile d'appels ( en bon français)
    Maintenant il ne faut pas perdre de vue que OnPaint est appelée lors de l'appel d'autres méthodes comme CDialog :: OnSize , :: OnActivate etc..

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Je comprends bien ce que vous dites, mais voici ce qui se passe:

    ...avec ca, je vais pas bien loin

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Vous devez avoir une fenêtre "Call Stack" ou "Pile d'appels" quelque part dans votre IHM.
    Cliquez sur la première ligne (celle toute en haut de la fenêtre), si c'est de l'assembleur, cliquez sur la ligne juste en dessous, et ainsi de suite jusqu'à ce que la ligne ne soit plus de l'assembleur.
    A ce moment, envoyez nous une copy d'écran avec la fenêtre "Call Stack" et la fenêtre avec le code source.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Vous devez avoir une fenêtre "Call Stack" ou "Pile d'appels" quelque part dans votre IHM.
    Cliquez sur la première ligne (celle toute en haut de la fenêtre), si c'est de l'assembleur, cliquez sur la ligne juste en dessous, et ainsi de suite jusqu'à ce que la ligne ne soit plus de l'assembleur.
    A ce moment, envoyez nous une copy d'écran avec la fenêtre "Call Stack" et la fenêtre avec le code source.
    Ca n'en dit pas plus que l'image que j'ai deja postee (ack je remarque que le lien a l'air mort...): la premiere adresse du call stack est bien "0xffffff90()", et la seconde pointe sur n'importe quoi. Bref, le code se retrouve dans les choux a un moment donne. J'ai une autre machine sur laquelle je fais tourner le code, et il n'y a pas ce plantage. Les drivers (NVidia) ne sont pas les memes et donc je pense que ca vient de la. Conclusion provisoire, il n'y a pas grand chose que je puisse faire sinon changer de drivers graphique, ou bien autre solution serait d'inhiber le "OnPaint" le temps que l'appli s'initialise...

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    On n'avait pas le CallStack dans l'image.
    Si vous avez une CallStack, c'est qu'elle n'a pas été détruite donc vous n'êtes pas en plein plantage mémoire.
    Donnez-nous ce qu'affiche la CallStack et le code source correspondant à la frame de plus au niveau ayant accès à ce code source.
    seconde pointe sur n'importe quoi
    Laissez nous en juger.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Je ne peux pas reposter l'image pour l'instant (pas devant le bon PC).

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Apparemment ce plantage vient du driver NVidia de ma carte graphique. En mettant un pilote plus ancien, le probleme disparait...

    Gorgo T.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plantage IIS ...
    Par rgarnier dans le forum XMLRAD
    Réponses: 20
    Dernier message: 28/10/2003, 10h54
  2. Plantage de Delphi 7
    Par Andry dans le forum EDI
    Réponses: 3
    Dernier message: 04/09/2003, 16h36
  3. Réponses: 7
    Dernier message: 20/08/2003, 10h33
  4. plantage a la deconnexion du client
    Par travail dans le forum 4D
    Réponses: 3
    Dernier message: 05/06/2003, 13h39
  5. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04

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