¿La pila llegar desenrolla cuando se produce un SIGABRT?
-
18-09-2019 - |
Pregunta
¿La pila llegar desenrollado (destructores de ejecución) cuando se produce un SIGABRT en C ++?
Gracias.
Solución
Esta respuesta indica que los destructores no son llamados .
Otros consejos
No:
$ 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
No, únicas excepciones desencadenan pila desenrollar. Las señales son parte de POSIX, que es una API de C, así que no es "consciente de las" instalaciones de C ++, tales como excepciones.
La página del manual signal(3)
en mi caja de Mac OS X dice
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
lo que me hace pensar que el valor por defecto es no descansar ...
SIGABRT la señal se utiliza para la fabricación de archivo de base de aplicación en ejecución algún tiempo. Nosotros utilizamos algún tiempo esta señal a la aplicación de depuración. Y por lo que yo sé, no destructores son llamados por esta señal.