Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1270 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Signal Handler (segmentation fault)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Signal Handler (segmentation fault)

n°540152
scool36
Vive les Ours
Posté le 15-10-2003 à 11:44:54  profilanswer
 

Bonjour a tous....
Voila j'aimerai catcher un signal unix, (je crois que c'est possible avec un signal handler mais je ne sais pas du tout comment on fait).
J'ai un programme C++ qui genere une "segmentation fault".
j'aimenrai savoir commment je pourrai attraper cette petite bete.
 
Si vous avez des idees, ou des conseils pour d'autres facons de resoudre se probleme.
 
Merci...

mood
Publicité
Posté le 15-10-2003 à 11:44:54  profilanswer
 

n°540157
kadreg
profil: Utilisateur
Posté le 15-10-2003 à 11:48:06  profilanswer
 

man signal (pour faire simple)
 
man sigaction pour les 3l33t modernes


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°540178
scool36
Vive les Ours
Posté le 15-10-2003 à 12:04:04  profilanswer
 

Mes question vont etre un peu con, mais :
 
1) Le signal handler ce fait en C??????
2) On peut ecrire du C dans un programme C++????

n°540179
kadreg
profil: Utilisateur
Posté le 15-10-2003 à 12:04:32  profilanswer
 

1- oui
2- oui


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°540183
scool36
Vive les Ours
Posté le 15-10-2003 à 12:10:10  profilanswer
 

Merci pour ton aide...

n°540261
Taz
bisounours-codeur
Posté le 15-10-2003 à 13:16:38  profilanswer
 

tu ferais bien d'utiliser des bibli C++ pour faire tout ça, genre GNUCOmmonC++ ou Boost, parce que les fonctions corrompent en général pas mal de ttruc (notemment au niveau de destructeurs)

n°540471
scool36
Vive les Ours
Posté le 15-10-2003 à 16:02:40  profilanswer
 

J'essaye la methode signal donne dans "signal.h", mais y a un truc que je comprend pas:
J'ai trouve un exemple sur le net pour detecter le signal "control D" :
Le code est le suivant :
------------------------------------------------------
#include <stdio.h>      
#include <unistd.h>    
#include <signal.h>    
   
void catch_int(int sig_num)
{
    signal(SIGINT, catch_int);
    printf("Don't do that\n" );
    fflush(stdout);
}
   
int main(int argc, char* argv[])
{
    /* set the INT (Ctrl-C) signal handler to 'catch_int' */
    signal(SIGINT, catch_int);
   
    /* now, lets get into an infinite loop of doing nothing. */
    for ( ;; )
        pause();
}
------------------------------------------------------------------
Je le compile bien, il marche bien, mais ma question est : Y a pas une erreur de typage????? la fonction catch_int prend bien un  int en parametre, et on le voit pas a l'appel......
 
 
Par contre quand j'integre ce code dans mon exemple C++ il me met une erreure de typage qui est la suivante :
GT3MadCity.h:2449: no matches converting function `catch_int' to type `void (*)(int)'
 
 
Et j'aurais encore une question, ca veut dire quoi ca :    typedef void (*sighandler_t)(int);
C'est dans l'aide sur signal (man signal)..
 
Merci  
 
 
 
 
 
 
 
 
 

n°540480
Kristoph
Posté le 15-10-2003 à 16:10:56  profilanswer
 

En gros, il faut que tu retrouves ton cours sur les pointeurs de fonctions en C ou en C++.
 
:D
 
Sinon, une autre suggestion : un SIGSEGV en général c'est un bug à corriger, pas à intercepter. Je suggère d'aller faire un petit tour du coté de valgrind sur Google.

n°540488
scool36
Vive les Ours
Posté le 15-10-2003 à 16:19:05  profilanswer
 

Ouais mais en fait le programme C++ c'est pas moi qui l'ai fait, donc je vais pas aller mettre mon nez la dedans.
 
Et le truc qu'y a c'est que je bosse dans une equipe sur des Grids Services, et le prgramme C++ fait cracher tout le container tomcat une fois sur 10, donc si il pouvait juste s'arreter tout seul sans tout faire foirer mon boss serait content.
 
C'est pour ca, il faut que j'intercepte ce signal et que je le fasse s'arreter en douceur.
 
Si quelqu'un pouvait me renseigner ce serait :bounce: vachement bien.

n°540495
Taz
bisounours-codeur
Posté le 15-10-2003 à 16:25:25  profilanswer
 

en gros c'est du C quoi ...

mood
Publicité
Posté le 15-10-2003 à 16:25:25  profilanswer
 

n°540568
scool36
Vive les Ours
Posté le 15-10-2003 à 17:07:51  profilanswer
 

Ouais en fait c du c, c'est ca mon prbleme... non c'est bien le c mais j'en ai pas beaucoup fait.
 
Si quelqu'un pouvait tout de meme me renseignere sur ce que cela veut dire je crois ca pourrait m'aider :
GT3MadCity.h:2449: no matches converting function `catch_int' to type `void (*)(int)'  
 
Et aussi c'est quoi ce type bizarre :
typedef void (*sighandler_t)(int);  
 
Merci merci
 

n°540576
VisualC++
J'va y penser ...
Posté le 15-10-2003 à 17:12:32  profilanswer
 

met ta fonction handler en static .... et lis le man

n°540967
bjone
Insert booze to continue
Posté le 15-10-2003 à 23:02:48  profilanswer
 

je sais pas, mais pour une fois je vais être médisant comme Taz en temps normal, mais ça sens le gars qui veux cacher ses seg fault....

n°540969
bjone
Insert booze to continue
Posté le 15-10-2003 à 23:03:35  profilanswer
 

scool36 a écrit :

Ouais mais en fait le programme C++ c'est pas moi qui l'ai fait, donc je vais pas aller mettre mon nez la dedans.
 
Et le truc qu'y a c'est que je bosse dans une equipe sur des Grids Services, et le prgramme C++ fait cracher tout le container tomcat une fois sur 10, donc si il pouvait juste s'arreter tout seul sans tout faire foirer mon boss serait content.
 
C'est pour ca, il faut que j'intercepte ce signal et que je le fasse s'arreter en douceur.
 
Si quelqu'un pouvait me renseigner ce serait :bounce: vachement bien.


 
autant pour moa :jap:

n°540978
mrbebert
Posté le 15-10-2003 à 23:06:48  profilanswer
 

scool36 a écrit :

...
Je le compile bien, il marche bien, mais ma question est : Y a pas une erreur de typage????? la fonction catch_int prend bien un  int en parametre, et on le voit pas a l'appel
......

non, y a pas d'erreur, la fonction catch_int() n'est pas appellée dans le main.

signal(SIGINT, catch_int)

installe le handler (la fonction catch_int) pour le signal SIGINT. Mais il n'y a pas d'appel de fonction à ce niveau.


Message édité par mrbebert le 15-10-2003 à 23:07:37
n°540981
Taz
bisounours-codeur
Posté le 15-10-2003 à 23:08:44  profilanswer
 

et ? peut etre que mosieur fais des control+C :o

n°541087
bjone
Insert booze to continue
Posté le 16-10-2003 à 01:08:23  profilanswer
 

Taz a écrit :

et ? peut etre que mosieur fais des control+C :o


 
bah il avait parlé de seg fault au début :D

n°541118
Taz
bisounours-codeur
Posté le 16-10-2003 à 07:56:25  profilanswer
 

qui n'est pas SIGINT

n°541446
scool36
Vive les Ours
Posté le 16-10-2003 à 15:36:08  profilanswer
 

Le SGIINT c'etait juste pour tester si le Signal Handler marchait bien...


---------------
La meilleure facon d'en apprendre toujours plus, c'est de ne pas retenir ce qu'on nous dit.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Signal Handler (segmentation fault)

 

Sujets relatifs
Erreur de segmentation :/erreur de segmentation
[QT] J'arrive pas à connecter mon signalseg fault occasionnel, disparait quand debug pas a pas
[C] seg fault : please help [file avec des listes][JS] ajout d'un handler onclick !!! urgent :(
Erreur de Segmentationsegmentation fault
Erreur de segmentation suite au passage à SuSE 8.1 
Plus de sujets relatifs à : Signal Handler (segmentation fault)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR