Je reçois un défaut de segmentation en temps aléatoire.
J'enregistré le signal, mais gestionnaire signal de non appelé en cas de défaut de segmentation a eu lieuLe gestionnaire de signal n'est pas appelé pour dlopen ou dlclose
#include <unistd.h>
#include <dlfcn.h>
#include <iostream>
#include <signal.h>
#include <execinfo.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
using namespace std;
void Handler(int sig)
{
cout << "handler called " << strsignal(sig) << endl;
exit(1);
}
int main()
{
cout << "Testing crash !" << endl;
signal(SIGSEGV, Handler);
signal(SIGINT, Handler);
signal(SIGABRT, Handler);
for (int i = 0; i < 10; i++)
{
cout << i << " Before open" << endl;
void *handler = dlopen("/home/user/Test.so", RTLD_LAZY);
if (handler)
{
cout << i << " Before close" << endl;
dlclose(handler);
cout << i << " After close" << endl;
}
else
{
cout << "Error " << dlerror() << endl;
}
}
return 0;
}
Sortie:
Run1
Testing crash !
0 Before open
0 Before close
0 After close
1 Before open
1 Before close
Segmentation fault (core dumped)
Run2
0 Before open
0 Before close
0 After close
1 Before open
1 Before close
1 After close
Segmentation fault (core dumped)
problème est gestionnaire de signal est pas appelé à analyser le problème
La faute de segmentation est SIGSEGV. SIGINT est déclenché lorsque vous appuyez sur Ctrl-C. –
Et btw, il ya l'appel système raise(), en utilisant kill peut-être juste non déterministe si le noyau est bogué? –
@PaulStelian. J'ai essayé de supprimer la chose que vous avez mentionnée alors même que j'obtiens le même résultat. Si vous voulez, je vais coller le code mis à jour –