Est-ce que la pile se dérouler quand un SIGABRT se produit?
-
18-09-2019 - |
Question
La pile se dévidé (Destructeurs exécuter) lorsqu'un SIGABRT se produit en C ++?
Merci.
La solution
Cette réponse indique que Destructeurs ne sont pas appelés .
Autres conseils
Non:
$ cat test.cc
#include <iostream>
#include <sys/types.h>
#include <signal.h>
class Test {
public:
~Test() { std::cout << "~Test called" << std::endl; }
};
int main(int argc, char *argv[])
{
Test t = Test();
if (argc > 1) {
kill(0, SIGABRT);
}
return 0;
}
$ g++ test.cc
$ ./a.out
~Test called
$ ./a.out 1
Aborted
Non, seules exceptions déclenchent le déroulement pile. Les signaux font partie de POSIX, qui est une API C, il est donc pas « au courant » des installations de C ++, comme des exceptions.
La page de manuel signal(3)
sur ma boîte Mac OS X dit
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
qui me porte à croire que la valeur par défaut est de ne pas se détendre ...
SIGABRT le signal est utilisé pour la fabrication de fichier de base de l'application en cours d'exécution un certain temps. Nous utilisons un certain temps ce signal à l'application de débogage. Et pour autant que je sais Destructeurs ne sont pas appelés par ce signal.