我读过,可以调用std::set_terminate()
使用自己的函数作为全局异常处理程序,它捕获所有未处理的异常。为什么我的终止处理程序从不被调用?
简化我的程序代码:
#include <exception>
#include <stdexcept>
#include <iostream>
void my_terminate_handler()
{
std::cerr << "Terminate handler" << std::endl;
std::cin.get();
std::abort();
}
int main()
{
std::set_terminate(my_terminate_handler);
int i = 1;
i--;
std::cout << 1/i << std::endl;
return 0;
}
为什么my_terminate_handler()
永远不会调用?在VC++ 2013,2015 RC和gcC++ - 4.8中都是如此。
我可以在全球范围内捕捉到所有这些信号吗? – vladon
@ vladon:[是](http://en.cppreference.com/w/cpp/utility/program/signal)。虽然不能保证零除会产生一个信号:正如我所说的,它给出了未定义的行为。 –