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

Bibliothèques Discussion :

segfault avec winSNMP


Sujet :

Bibliothèques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut segfault avec winSNMP
    Bonjour à tous !!!
    C'est mon premier post sur developpez.com, alors soyez indulgent si jamais je fais une entorse au règlement ou à vos habitudes (pas taper, pas taper )
    Alors voilà ma situation: je suis étudiant et j'effectue en ce moment mon stage de fin de DUT (bac+2). Je dois programmer un manager SNMP en C++ avec Qt (je n'ai pas posté dans la section Qt car je ne pense pas que ce logiciel soit à l'origine de mon problème).
    J'ai décidé d'utiliser la library winSNMP (avec winsnmp.h et WSNMP32.Lib), en m'aidant de MSDN:
    http://msdn.microsoft.com/en-us/library/aa379373(v=VS.85).aspx
    Je voulais commencer par un programme permettant d'envoyer une requête snmp-get et de réceptionner la réponse.
    J'ai donc suivi le protocole pas à pas (ouverture application, ouverture session, ... etc), et j'ai obtenu un programme qui envoyait correctement le message, mais ne recevait rien (la fonction SnmpRecvMsg me retournait "SNMPAPI_NOOP" ce qui signifie "The specified session has no messages in its queue at this time").
    Pour corriger ce problème j'ai ajouté une temporisation entre l'émission et la réception:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    time_t debut = time(NULL);
    int fin = 1;
    while ((time(NULL)-debut) < fin);
    Compilation et exécution, tout va pour le mieux dans le meilleur des mondes .
    Je rajoute donc les fonctions qui permettent de récuperer les informations contenues dans la réponse (SnmpGetPduData et SnmpGetVb), je compile et puis patatra: segfault .
    j'essaye donc un débogage, et là Qt m'indique que l'erreur vient de ma tempo O_o
    Je suis donc coincé:
    -soit je laisse la tempo, je receptionne la réponse mais le programme plante,
    -soit je retire la tempo, le programme ne plante pas mais je ne reçois rien,

    Cependant l'erreur ne peut pas provenir de la temporisation (puisque le programme a fonctionné avec), elle vient forcement des fonctions ajoutées.
    De plus l'erreur persiste même en remplacant la tempo par des fonctions type sleep ou delay.
    Voici donc la partie du programme qui nous intéresse:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
        //-------------------------( attendre )------------------------------
     
        time_t debut = time(NULL);
        int fin = 1;
        while ((time(NULL)-debut) < fin); //le debogage signale l'erreur ici
     
     
        //-------------------------( recevoir un message )-------------------
     
        recv = SnmpRecvMsg(hSession,RepsrcEntity,RepdstEntity,Repcontext,&RepPDU);
     
        if(recv == SNMPAPI_SUCCESS)
        {
            recvtxt.setNum(recv);
            ui->lineEdit_11->setText(recvtxt);
        }
        else
        {
            error = SnmpGetLastError(hSession);
     
            errortxt.setNum(error);
            ui->lineEdit_11->setText(errortxt);
        }
     
     
        //-------------------------( recuperer donnees )---------------------
     
        data = SnmpGetPduData(RepPDU,dataPDU_type,datarequest_id,dataerror_status,dataerror_index,&datavarbindlist);
     
        if(data == SNMPAPI_SUCCESS)
        {
        }
        else
        {
        }
     
        repvbl = SnmpGetVb(datavarbindlist,index,name,&val);
     
        if(repvbl == SNMPAPI_SUCCESS)
        {
        }
        else
        {
        }
     
     
        int res = NULL;
        QString restxt = NULL;
        res = val.value.uNumber;
        restxt.setNum(res);
        ui->lineEdit_16->setText(restxt);
    Pour une meilleure lisibilité, j'ai retiré les if-else quasi-identiques au premier.
    Vous pourrez trouver les définitions des fonctions, des paramètres et des valeurs retournées ici:
    http://msdn.microsoft.com/en-us/library/aa379364(v=VS.85).aspx
    J'imagine que mon erreur se situe au niveau des pointeurs (source importante de segfault),
    donc voilà la déclaration des variables qui nous intéressent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HSNMP_PDU RepPDU = NULL;
     HSNMP_VBL datavarbindlist = NULL;
    j'ai également essayé avec "LPHSNMP_PDU RepPDU;" qui correspond à un pointeur de HSNMP_PDU
    puis en passant *RepPDU en paramètre, mais cela provoque aussi un segfault.

    Au secours, je sais pas comment me sortir de cette situation .

    Ce post est un peu long, mais je voulais exposer clairement mon problème, et vous montrer que j'avais réfléchi avant de poster.
    Merci d'avance pour votre aide et vos réponses .

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut UP
    Je suis toujours coincé...
    Personne n'a une idée pour me débloquer ?

  3. #3
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Par défaut SNMP Manager
    bonjour,

    je ne peux malheureusement pas proposer une solution.

    Par contre, je suis actuellement moi-même en train de développer un manager SNMP (en console uniquement).

    J'avais l'intention d'utiliser le framework suivant:

    http://www.codeproject.com/KB/librar...MPWrapper.aspx

    Pour utiliser l'API winsnmp il convient d'inclure dans le projet les références suivantes

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    J'utilise visual studio C++ Express

    Malheureusement je n'arrive pas compiler le code d'exemple.

    Si vous avez plus d'expérience en ce qui concerne le paramétrage de visual Studio, je serais preneur pour tout renseignement

    Si le coeur vous en dit, on pourrait via ce forum travailler en commun sur nos projets respectifs.

    cordialement

    Markus Bocker

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut entraide
    Bonjour,
    Tout d'abord, je vous remercie de m'avoir répondu (même si vous n'avez pas pu m'aider ), car après une semaine d'attente, je commencais à croire que ce forum était désert.
    Je suis désolé, mais je ne connais pas ce framework, et je n'ai jamais utilisé MS Visual C++ (je crois que je vais avoir du mal à vous aider ).
    Cependant j'accepte avec plaisir votre proposition de travail en commun, en espérant que ma courte expérience avec winsnmp pourra vous être utile .
    Pour commencer, j'essaierai dès que possible de télécharger et de compiler le code disponible sur CodeProject, mais au moment où j'écris ces lignes le site est indisponible.
    Afin que je puisse vous aider, pourriez vous me dire quel est le message d'erreur retourné par votre compilateur ?
    Salutations.

Discussions similaires

  1. catch segfault avec g++
    Par pyros dans le forum C++
    Réponses: 12
    Dernier message: 10/06/2011, 13h36
  2. [Python API 2.3] Segfault avec PyInt_FromLong
    Par efficks dans le forum Interfaçage autre langage
    Réponses: 2
    Dernier message: 26/06/2008, 15h02
  3. [Python API 2.3] Segfault avec PyInt_FromLong
    Par efficks dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 26/06/2008, 00h37
  4. Début de moteur 2D avec SDL: Segfault
    Par Kr00pS dans le forum SDL
    Réponses: 3
    Dernier message: 11/06/2007, 15h31

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