#include #include #include void rec(unsigned int i) { printf("%d\n", i); uint8_t test[4096]; test[0] = rand(); rec(i + 1); } void test() { puts("test()"); __try { rec(1); } __except (EXCEPTION_EXECUTE_HANDLER) { puts("caught something"); } } int main() { //unbuffer stdout setvbuf(stdout, (char *)NULL, _IONBF, 0); std::thread thr1([] { test(); }); thr1.join(); puts("joined"); Sleep(1000); puts("slept"); using ctx_t = boost::context::execution_context; std::thread thr2([] { ctx_t ctx([](ctx_t c) { puts("started context"); test(); // triggers an access violation that's not caught return c; }); ctx = ctx(); }); thr2.join(); puts("joined"); return 0; }