Sigabrt가 발생하면 스택이 풀리나요?
-
18-09-2019 - |
문제
Sigabrt가 C ++에서 발생하면 스택이 풀리게 되나요?
감사.
해결책
이 답변 소멸자가 호출되지 않았 음을 나타냅니다.
다른 팁
아니:
$ 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
아니요, 예외 만 스택 풀기를 트리거합니다. 신호는 C API 인 POSIX의 일부이므로 예외와 같은 C ++ 시설을 "인식하지 않습니다.
그만큼 signal(3)
내 MAC OS X 박스의 Man Page가 말합니다
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
그것은 기본값이 긴장을 풀지 않는다는 것을 나에게 제안합니다 ...
신호 SIGABRT는 시간에 실행중인 핵심 파일을 만드는 데 사용됩니다. 우리는이 신호를 사용하여 응용 프로그램을 디버그합니다. 그리고 내가 아는 한이 신호는 소멸자가 호출되지 않습니다.
제휴하지 않습니다 StackOverflow