SIGTRAP <- Cekoica?
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

SIGTRAP <- Cekoica?



  1. #1
    invite7039ce99

    SIGTRAP <- Cekoica?


    ------

    Bonjour!
    Il se trouve que j'ai un petit probleme au niveau d'une fonction execlp.
    Mon programme est sense etre une replique d'un shell (C'est a dire que le prompt doit s'afficher, demander une commande puis la gerer.) et pour ce faire je stock la commande tapee dans un char etoile puis je lance une recherche dans les /bin, /sbin... ect. pour voir si cette commande existe bien puis si elle peut bien etre executee.
    Ensuite, je passe tout ca en argument a ma fonction execlp si la commande existe. Cela donne:

    Code:
    execlp(path[save], pars, pars_path(env), 0);
    path[save] correspond au chemin dans lequel se trouve l'executable, pars correspond a la commande tapee et pars_path est une fonction renvoyant le pwd courant.

    Lorsque je lance le programme avec une commande "ls", il m'affiche bien tout ce que j'ai dans le dossier mais me kill le process directement apres (alors que j'ai un "while 42" qui est sensé l'en empêcher).
    Avec gdb j'obtiens ceci en passant sur le execlp (il ne m'affiche donc pas le dossier sur le debugger):

    Program received signal SIGTRAP, Trace/breakpoint trap.
    Cannot remove breakpoints because program is no longer writable.
    It might be running in another process.
    Further execution is probably impossible.
    0x280519d8 in ?? () from /libexec/ld-elf.so.1
    J'ai fait quelques recherche et apparement le signal SIGTRAP seraita cause d'un "point d'arret" situe quelque part dans le programme. Quelqu'un pourrait m'en dire plus dessus?
    Merci!

    Ps:
    Voici le code:


    Code:
    void    research_for_line(char *pars, char **path, char *line, char **env)                                                                   
    {                                                                                                                                            
             int   count;                                                                                                                               
      int   verif;                                                                                                                               
      int   exec;                                                                                                                                
      int   save = -1;                                                                                                                           
                                                                                                                                                 
      count = 0;                                                                                                                                 
      while (count != 14)                                                                                                                        
        {                                                                                                                                        
          path[count] = my_str_to_word_tab(pars, path[count]);                                                                                   
          verif = access(path[count], F_OK);                                                                                                     
          if (verif == 0)                                                                                                                        
            {                                                                                                                                    
              exec = access(path[count], X_OK);                                                                                                  
              if (exec == 0)                                                                                                                     
                save = count;                                                                                                                    
            }                                                                                                                                    
          ++count;                                                                                                                               
        }                                                                                                                                        
      if (save != -1)                                                                                                                            
        {                                                                                                                                        
          execlp(path[save], pars, pars_path(env), 0);                                                                                           
          my_putstr("\n");                                                                                                                       
          my_putstr(pars_path(env));                                                                                                             
          my_putstr("\n");                                                                                                                       
       }                                                                                                                                         
      else                                                                                                                                       
        my_putstr("Command not found.\n");                                                                                                       
      count = 0;                                                                                                                                 
    }

    -----
    Dernière modification par yoda1234 ; 11/03/2009 à 15h56. Motif: Modification des balises

  2. #2
    .:Spip:.

    Re : SIGTRAP <- Cekoica?

    salut,

    info signal donne

    SIGTRAP 5 Core Trace/breakpoint trap


    je n'ai jamais utilisé, mais ça semble bien etre un signal que tu envoies depuis ton programme au kernel pour que ton debuggeur recupère le signal.


    compile ton programme avec les options de debug. et lance le avec gdb
    Soyez libre, utilisez Linux.

  3. #3
    invite7039ce99

    Re : SIGTRAP <- Cekoica?

    Merci pour ta reponse!
    J'ai deja regle le probleme: La fonction execve renvoit un signal SIGTRAP qui kill le processus courant. En fesant un fork, on peut faire un execve dans le fils (qui le kill) et laisser vivre le pere
    Sinon j'obtenais le signal sigtrap au niveau de gdb: A l'execution du programme, il me quittait purement et simplement.

Discussions similaires

  1. Processus ? cékoiça ?
    Par Myr dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 17/10/2004, 00h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.