set terminate handler in test framework to print stacktrace if called by test. Install signal handler on windows
This commit is contained in:
parent
271bc55694
commit
818cc1c495
|
@ -164,7 +164,7 @@ LONG WINAPI seh_exception_handler(LPEXCEPTION_POINTERS p)
|
||||||
exit(code);
|
exit(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#endif
|
||||||
|
|
||||||
[[noreturn]] void sig_handler(int sig)
|
[[noreturn]] void sig_handler(int sig)
|
||||||
{
|
{
|
||||||
|
@ -198,15 +198,29 @@ LONG WINAPI seh_exception_handler(LPEXCEPTION_POINTERS p)
|
||||||
#endif
|
#endif
|
||||||
#undef SIG
|
#undef SIG
|
||||||
}
|
}
|
||||||
std::printf("signal: (%d) %s caught:\n%s\n"
|
std::printf("signal: (%d) %s caught:\n%s\n", sig, name, stack_text);
|
||||||
, sig, name, stack_text);
|
|
||||||
|
|
||||||
output_test_log_to_terminal();
|
output_test_log_to_terminal();
|
||||||
|
|
||||||
exit(128 + sig);
|
std::exit(128 + sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _WIN32
|
[[noreturn]] void term_handler()
|
||||||
|
{
|
||||||
|
char stack_text[10000];
|
||||||
|
#if TORRENT_USE_ASSERTS \
|
||||||
|
|| defined TORRENT_ASIO_DEBUGGING \
|
||||||
|
|| defined TORRENT_PROFILE_CALLS \
|
||||||
|
|| defined TORRENT_DEBUG_BUFFERS
|
||||||
|
print_backtrace(stack_text, sizeof(stack_text), 30);
|
||||||
|
#elif defined __FUNCTION__
|
||||||
|
strcpy(stack_text, __FUNCTION__);
|
||||||
|
#else
|
||||||
|
strcpy(stack_text, "<stack traces disabled>");
|
||||||
|
#endif
|
||||||
|
std::printf("\n\nterminate called:\n%s\n\n\n", stack_text);
|
||||||
|
std::exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
void print_usage(char const* executable)
|
void print_usage(char const* executable)
|
||||||
{
|
{
|
||||||
|
@ -372,7 +386,9 @@ int EXPORT main(int argc, char const* argv[])
|
||||||
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
|
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#endif
|
||||||
|
|
||||||
|
std::set_terminate(term_handler);
|
||||||
|
|
||||||
signal(SIGSEGV, &sig_handler);
|
signal(SIGSEGV, &sig_handler);
|
||||||
#ifdef SIGBUS
|
#ifdef SIGBUS
|
||||||
|
@ -386,8 +402,6 @@ int EXPORT main(int argc, char const* argv[])
|
||||||
signal(SIGSYS, &sig_handler);
|
signal(SIGSYS, &sig_handler);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // _WIN32
|
|
||||||
|
|
||||||
int process_id = -1;
|
int process_id = -1;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
process_id = _getpid();
|
process_id = _getpid();
|
||||||
|
|
Loading…
Reference in New Issue