problème de breakpoint
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

problème de breakpoint



  1. #1
    Jack
    Modérateur

    problème de breakpoint


    ------

    Bonjour,

    je suis en train de debugger un programme et je n'arrive pas à le faire stopper sur un point d'arrêt. Pourtant l'exécution passe bien par la ligne marquée.

    Quelqu'un a-t-il une solution? Merci

    PS: je travaille avec une distibution debian

    -----

  2. #2
    inviteb9f49292

    Re : problème de breakpoint

    Question bête, as-tu enlevé _TOUTES_ les options d'optimisations, en plus d'ajouter l'option "-g"?

  3. #3
    Jack
    Modérateur

    Re : problème de breakpoint

    Je ne suis pas en mode release. Les infos de débug doivent donc être incluses. D'ailleurs, le mode pas-à-pas fonctionne normalement.

    A+

  4. #4
    Jack
    Modérateur

    Re : problème de breakpoint

    J'ai oublié de préciser que je travaillais sous code::blocks

    A+

  5. A voir en vidéo sur Futura
  6. #5
    invite2d7144a7

    Re : problème de breakpoint

    Bonjour,

    Je penche du côté de lou_ibmix_xi : c'est peut-être dû aux optimisations.

    Une autre possibilité - moins probable quand même - pourrait être que tu utilises une mauvaise version de gdb par rapport à ton compilateur.

    Sinon, poste ton code (complet ou une version simplifiée montrant le problème).

  7. #6
    Jack
    Modérateur

    Re : problème de breakpoint

    Je me suis contenté d'installer les paquet à l'aide de synaptic (je ne suis pas un pro de LINUX) et de mettre à jour au fur et à mesure.

    voici le code:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    
    #define MSGSIZE 500
    #ifndef IPPORT_MAX
    #define IPPORT_MAX 65535  /* max port */
    #endif
    
    int main(int argc,char *argv[]) {
        int sockfd, addr_in_size, ok=1;
        u_short portnum;
        struct sockaddr_in *to;
        struct hostent *toinfo;
        char *msg, htoname[256];
        u_long toaddr;
    
        switch(argc) {
        case 1:
            printf("Envoyer le message à : ");
            scanf("%s",htoname);
            printf("Sur le port : ");
            scanf("%hu",&portnum);
            break;
        case 2:
            strcpy(htoname,argv[1]);
            printf("Envoyer des messages à %s sur le port : ",argv[1]);
            scanf("%hu",&portnum);
            break;
        case 3:
            strcpy(htoname,argv[1]);
            portnum = (u_short)atoi(argv[2]);
            printf("Envoyer des messages à %s sur le port %d\n",argv[1],portnum);
            break;
        default:
            fprintf(stderr,"%s: Nombre d’arguments incorrect \n",argv[0]);
            exit(1);
        }
    
        if((portnum < IPPORT_RESERVED) || (portnum > IPPORT_MAX))
        {
            printf("%s: mauvais numéro de port \n",argv[0]);
            exit(1);
        };
        msg = (char *)malloc(MSGSIZE);
        to = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));
        if((toinfo = gethostbyname(htoname)) == NULL)
        {
            printf("Erreur dans gethostbyname: \n");
            exit(errno);
        };
        toaddr = *(u_long *)toinfo->h_addr_list[0];
    
        addr_in_size = sizeof(struct sockaddr_in);
        memset((char *)to,(char)0,addr_in_size);
        to->sin_family = AF_INET;
        to->sin_addr.s_addr = toaddr;
        to->sin_port = /*(htons)*/portnum;
    
        if((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
        {
            printf("Erreur dans socket: \n");
            exit(errno);
        };
        while(ok)
        {
            printf("Message: ");
            scanf("%s",msg);
            printf("\n");
            ok = (msg[0] != '0');
            if(sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr *)to, addr_in_size) == -1)
            {
                printf("Erreur dans sendto \n");
                exit(errno);
            }
        }
        return 0;
    }
    par exemple, je mets un break pint su le "switch(arg)" du début et lorsque je lance, la console de CB affiche "Message" (1ère ligne de la boucle "while(1)")

    Je doute qu'il ait optimisé le switch ...
    De toutes manières, c'est pareil avec d'autres lignes.

    Merci

  8. #7
    invite2d7144a7

    Re : problème de breakpoint

    Bonjour,

    Tu ne peux pas avoir de breakpoint valide sur une ligne contenant seulement l'ouverture du switch, car ce n'est pas une expression exécutable.

    Pour le reste, je ne peux pas tester, ne disposant pas des paquets nécessaires.

  9. #8
    Jack
    Modérateur

    Re : problème de breakpoint

    Tu ne peux pas avoir de breakpoint valide sur une ligne contenant seulement l'ouverture du switch, car ce n'est pas une expression exécutable.
    hem! hem! Il y a bien évaluation de argc il me semble. Donc il y a bien du code. Du reste, comme je l'ai dit plus haut, c'est pareil avec les autres lignes.

    A+

  10. #9
    invite2d7144a7

    Re : problème de breakpoint

    Bonjour,

    Oui, désolé, je ne sais pas à quoi je pensais pendant que j'écrivais cette ânerie.

    Pan sur le bec.

  11. #10
    Jack
    Modérateur

    Re : problème de breakpoint

    Pan sur le bec.
    Et moi qui pensait que whoami était une commande unix ...

    Alors qu'en fait c'est un nom d'oiseau

    A+

  12. #11
    invite2d7144a7

    Re : problème de breakpoint

    Bonjour,

    Cela dit, je ne comprends pas ce qui se passe dans ton cas.

    Es-tu sûr que le programme passe par là lors de l'exécution ?
    (Tu peux lui faire afficher quelque chose, ou beeper, ou autre ...)

    Sinon, une fois (c'était il y a plus de 20 ans ), j'avais passé pas mal de temps à trouver la solution à un problème d'exécution, et la réponse était farfelue : j'avais 2 fichiers portant le même nom dans mon projet, dans des répertoires différents, et je modifiais celui qui était en fait un double que j'avais créé provisoirement, et qui ne faisait plus partie du chemin de compilation (à l'époque, on n'avait pas tous les retours visuels désormais générés par les compilateurs).

    Et oui, whoami vient d'Unix (que j'ai utilisé bien avant que Linux soit même un vague projet dans la tête de Linus Torvalds).

  13. #12
    Jack
    Modérateur

    Re : problème de breakpoint

    En pas à pas, le programme se déroule comme il faut.

    A ce propos, c'est normal de ne pas pouvoir avancer d'un nouveau pas si je ne fais pas quitter le curseur de l'icône "next line"? (Oui, je sais, il y a des touches de fonction, mais j'aime bien la souris).

    A+

  14. #13
    invite2d7144a7

    Re : problème de breakpoint

    Bonjour,

    Non, chez moi ça marche.

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  2. problème d'équation et aussi un autre problème de maths
    Par invitefab47bfd dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 23/09/2009, 19h08
  3. Un petit problème qui me pause problème lol
    Par invitef2853e5d dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 31/03/2009, 15h28
  4. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par inviteaca1b987 dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...