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

Windows Discussion :

Rapport d'erreurs Windows pour crash programme C++.


Sujet :

Windows

  1. #1
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut Rapport d'erreurs Windows pour crash programme C++.
    Bonjour afin de maintenir un programme j'aimerais savoir comment analiser un rapport d'erreurs de windows quand ce dernier crash.

    Mon programme est coder en C++, compiler avec MinGW (gcc 4.4), Qt4.6 et OpenCV.
    J'obtiens se rapport d'erreur avec des compilation en DEBUG ou en RELEASE.
    J'aimerais savoir comment le lire afin de debugguer mon programme.

    Voici un rapport d'erreur que j'obtiens:

    Faulting application name: AVOServer.exe, version: 0.0.0.0, time stamp: 0x4b5de4c3
    Faulting module name: libx7snet.dll, version: 0.0.0.0, time stamp: 0x4b5dbd69
    Exception code: 0xc000001d
    Fault offset: 0x0000310d
    Faulting process id: 0x142c
    Faulting application start time: 0x01ca9df1d156e0e2
    Faulting application path: C:\Users\Ben\project\builds\CvS400\Debug\bin\AVOServer.exe
    Faulting module path: C:\Users\Ben\project\builds\CvS400\Debug\bin\libx7snet.dll
    Report Id: 405adc42-09f6-11df-a214-00805a693e8f

    avec le fichier XML de l'erreur en détaillée.


    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
    - <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    - <System>
      <Provider Name="Application Error" /> 
      <EventID Qualifiers="0">1000</EventID> 
      <Level>2</Level> 
      <Task>100</Task> 
      <Keywords>0x80000000000000</Keywords> 
      <TimeCreated SystemTime="2010-01-25T21:11:50.000000000Z" /> 
      <EventRecordID>1240</EventRecordID> 
      <Channel>Application</Channel> 
      <Computer>Ben-Win</Computer> 
      <Security /> 
      </System>
    - <EventData>
      <Data>AVOServer.exe</Data> 
      <Data>0.0.0.0</Data> 
      <Data>4b5de4c3</Data> 
      <Data>libx7snet.dll</Data> 
      <Data>0.0.0.0</Data> 
      <Data>4b5dbd69</Data> 
      <Data>c000001d</Data> 
      <Data>0000310d</Data> 
      <Data>142c</Data> 
      <Data>01ca9df1d156e0e2</Data> 
      <Data>C:\Users\Ben\project\builds\CvS400\Debug\bin\AVOServer.exe</Data> 
      <Data>C:\Users\Ben\project\builds\CvS400\Debug\bin\libx7snet.dll</Data> 
      <Data>405adc42-09f6-11df-a214-00805a693e8f</Data> 
      </EventData>
      </Event>
    Est-ce que avec cette information je peux retrouver la ligne ou la function qui provoque cette erreur.

  2. #2
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Si ton application a geré un fichier .core, tu peux l'analyser avec WinDBG.
    Si tu veux vraiment la ligne et la fonction, compile ton code avec l'option -g de gcc, et execute ton application depuis gdb.
    Lors de l'erreur de segmentation, gcc t'affichera tous les détails que tu veux.

    Pour l'indice, il semblerait que ce soit libx7snet.dll que tu as chargé dans AVOServer.exe qui pose soucis

    ENJOY
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  3. #3
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par sloshy Voir le message
    Si ton application a geré un fichier .core, tu peux l'analyser avec WinDBG.
    Je trouve pas ce fichier et j'aimerais bien savoir comment le generer.


    Citation Envoyé par sloshy Voir le message
    Si tu veux vraiment la ligne et la fonction, compile ton code avec l'option -g de gcc, et execute ton application depuis gdb.
    Lors de l'erreur de segmentation, gcc t'affichera tous les détails que tu veux.
    Normalement je fais ca mais je n'arrive pas a obtenir cette erreur avec le debugger en marche (probablement que le programe est un peu plus lent, et comme j'utilise bcp de thread ca change son comportement)


    Citation Envoyé par sloshy Voir le message
    Pour l'indice, il semblerait que ce soit libx7snet.dll que tu as chargé dans AVOServer.exe qui pose soucis!
    Justement j'aimerais savoir a quoi correspond Fault offset: 0x0000310d,
    et savoir si je peux indiquer cet instruction dans mon debugger et que quand elle arrive... ca stop mon programme ou qqc dans ce genre afin de retrouver a quelles lignes de code se trouve cet offset.


    Finalement je voulais savoir si il y avait un bon tutorial afin d'utiliser correctement les WER (Windows Error Report), le meilleurs que j'ai vu c'est
    http://blogs.msdn.com/oanapl/archive...evelopers.aspx
    mais ca n'explique pas comment les utiliser

    ENJOY

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Je n'ai pas utilisé WER mais cela semble assez semblable à Dr Watson.
    L'article du lien est assez clair.
    Quel passage vous pose problème ?

  5. #5
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    En résumer, j'aimerais savoir un peu plus sur mon crash en utilisant les WER (Windows7) ou DrWatson (WinXP).

    En effet, mon programme crash très rarement (2,3 jours avant un crash) et c'est très compliqué a trouver le bug. L'article que j'ai cité explique bien comment récupérer un WER (Localement). Mais j'aimerais bien un tutorial qui m'aide a analyser mon WER.

    En plus pour windows XP, je n'arrive pas a recuperer les dump du crash (.DMP), car winXP ne me laisse pas les copier/coller depuis le repertoire temp.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    On va faire simple donc DrWatson.

    Un fichier dmp est un simple fichier.

    Quel est le message d'erreur quand vous voulez copier ce fichier ailleurs dans votre arborescence de fichier ?

    Une fois le fichier dmp sauvegardé, il suffit de l'ouvrir avec WinDbg et en espérant que vous ayez encore des fichiers pdb de la version de prod.

  7. #7
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Je vais expliquer ce qu'il se passe sous windows XP:

    Mon programme crash, il me demande si je veux envoyer un rapport d'erreur ou non, et il me donne aussi un lien sur cliquer ici pour avoir plus d'information sur les données de l'erreur.

    Voici le genre de capture que j'obtiens:



    Je clique dessus, et en cliquant sur ce lien un fichier .dmp apparait dans C:\...Users\Local Config\Temp\
    Le problème est que se fichier ne peut pas être copié car il est "Utilisé par un autre processus" (l'application d'erreur de windows).
    Et si je ferme cette application, le fichier disparait (car c'est un fichier temporaire).

    Donc comment est-ce que je peux lire ce fichier?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    J'ai bien une petite idée, qui pourrait peut-être marcher, en deux étapes:
    1. Première étape: Ouvrir le fichier par CreateFile() en ne demandant aucun droit et en partageant FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE. Si ça marche, ça devrait maintenir le fichier en existence.
    2. Seconde étape: Après avoir fermé la boîte de dialogue, sans fermer le précédent handle, ouvrir le fichier avec au moins FILE_SHARE_DELETE d'activé, en demandant le droit en lecture cette fois-ci.
    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. Décoder le rapport d'erreur windows
    Par matll dans le forum Windows
    Réponses: 0
    Dernier message: 04/01/2012, 03h18
  2. Réponses: 2
    Dernier message: 02/09/2008, 17h04
  3. Erreur Windows ! Dans l'execution d'un programme !
    Par Geoff! dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/06/2006, 16h36
  4. Rapport d'erreurs Windows
    Par SteelBox dans le forum Windows
    Réponses: 12
    Dernier message: 22/08/2005, 17h34
  5. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13

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