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
        );
    }
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  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 : 40
    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);
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  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 ()
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  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 : 40
    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?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  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 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
    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
    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.

  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 : 40
    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.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  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
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

+ 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