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 :

trouver le texte d'une erreur


Sujet :

Windows

  1. #1
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut trouver le texte d'une erreur
    Bonjour à tous,


    Comment peut-on faire un appel à ceci en c99?
    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
    Le petit bout de code ci-dessous permet d'obtenir le message correspondant à un n° d'erreur obtenu par GetLastError(). 
    #include <windows.h>
    
    void GetErrorDescription(LPTSTR lpBuffer, DWORD dwBufferSize)
    {    
        FormatMessage(
            FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            lpBuffer,
            dwBufferSize,
            NULL
        );
    }

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par J4e8a16n Voir le message
    Bonjour à tous,


    Comment peut-on faire un appel à ceci en c99?
    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
    Le petit bout de code ci-dessous permet d'obtenir le message correspondant à un n° d'erreur obtenu par GetLastError(). 
    #include <windows.h>
    
    void GetErrorDescription(LPTSTR lpBuffer, DWORD dwBufferSize)
    {    
        FormatMessage(
            FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            lpBuffer,
            dwBufferSize,
            NULL
        );
    }
    de la même manière qu'en C89:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TCHAR buffer[256];
    GetErrorDescription(buffer, sizeof buffer / sizeof *buffer);

  3. #3
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    Je suis null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s\n", buffer);  ?
    Comment obtient-on un coredump (gcc) sous windows?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TCHAR buffer[256];
    int a= 10;
    *(int *)0 = 0;
    
    GetErrorDescription(buffer, sizeof buffer / sizeof *buffer);
    printf("%s\n", buffer);
    
    b = GetLastError();
    printf("%d %s\n", b, strerror(errno));
    printf("%s \n", strerror(b));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Starting program: C:\cygwin\home\Jean Pierre\debugging/err.exe
    Error: dll starting at 0x771f1000 not found.
    Error: dll starting at 0x76341000 not found.
    Error: dll starting at 0x771f1000 not found.
    Error: dll starting at 0x77321000 not found.
    Loaded symbols for C:\Windows\system32\ntdll.dll
    Loaded symbols for C:\Windows\syswow64\kernel32.dll
    Loaded symbols for C:\Windows\syswow64\msvcrt.dll
    
    Program received signal SIGSEGV, Segmentation fault.
    0x00401363 in main ()
    (gdb) bt
    #0  0x00401363 in main ()

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    tu espères faire quoi avec ça à part un segfault?

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par J4e8a16n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s\n", buffer);  ?
    Non, _tprintf(_TEXT("%s\n"), buffer);

    Voir tutos ou FAQ Win32.

    *(int *)0 = 0; Provoque une violation d'accès (SIGSEGV), pas une erreur logique Windows (qu'on peut récupérer à l'aide de GetLastError). Il y a un exemple de traitement des erreurs de type violation d'accès dans la FAQ C.

  6. #6
    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
    Pour être précis, ça provoque une exception Win32 EXCEPTION_ACCESS_VIOLATION. La C Run-Time Library (CRT) fait la cuisine nécessaire pour émuler un signal SIGSEGV.

    PS: Dans la fonction, il manque le flag FORMAT_MESSAGE_IGNORE_INSERTS

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    PS: Dans la fonction, il manque le flag FORMAT_MESSAGE_IGNORE_INSERTS
    intéressant, il faudrait mettre la FAQ à jour : http://c.developpez.com/faq/?page=er...format_message.

  8. #8
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par Melem Voir le message
    Non, _tprintf(_TEXT("%s\n"), buffer);

    Voir tutos ou FAQ Win32.

    *(int *)0 = 0; Provoque une violation d'accès (SIGSEGV), pas une erreur logique Windows (qu'on peut récupérer à l'aide de GetLastError). Il y a un exemple de traitement des erreurs de type violation d'accès dans la FAQ C.
    Et ajouter #include <tchar.h>

    JPD

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

Discussions similaires

  1. [AC-2007] Erreur 0 et Comment trouver l'origine d'une erreur ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2010, 21h04
  2. Réponses: 7
    Dernier message: 29/06/2007, 13h19
  3. Php Vers Flash (sendAndLoad): Trouver une erreur
    Par too_Slow_ dans le forum Flash
    Réponses: 7
    Dernier message: 02/03/2007, 21h19
  4. Zone de texte vide occasionne une erreur de type
    Par charleshbo dans le forum Access
    Réponses: 1
    Dernier message: 13/04/2006, 23h18
  5. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12

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