terminate handler is moved to a separete file
This commit is contained in:
parent
1324b2ded1
commit
fca9110b65
12
examples/terminate_handler.cpp
Normal file
12
examples/terminate_handler.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "utils/terminate_handler.hpp"
|
||||
|
||||
int main()
|
||||
{
|
||||
std::set_terminate(&terminate_handler);
|
||||
|
||||
throw std::runtime_error("runtime error");
|
||||
|
||||
return 0;
|
||||
}
|
33
memgraph.cpp
33
memgraph.cpp
@ -12,40 +12,11 @@
|
||||
#include "threading/pool.hpp"
|
||||
#include "threading/task.hpp"
|
||||
|
||||
#include <execinfo.h>
|
||||
|
||||
// TODO: move to separate header or source file
|
||||
// TODO: log to local file or remote database
|
||||
void stacktrace() noexcept
|
||||
{
|
||||
void *array[50];
|
||||
int size = backtrace(array, 50);
|
||||
std::cout << __FUNCTION__ << " backtrace returned " << size << " frames\n\n";
|
||||
char **messages = backtrace_symbols(array, size);
|
||||
for (int i = 0; i < size && messages != NULL; ++i) {
|
||||
std::cout << "[bt]: (" << i << ") " << messages[i] << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
free(messages);
|
||||
}
|
||||
|
||||
// TODO: log to local file or remote database
|
||||
void on_terminate() noexcept
|
||||
{
|
||||
if (auto exc = std::current_exception()) {
|
||||
try {
|
||||
std::rethrow_exception(exc);
|
||||
} catch (std::exception &ex) {
|
||||
std::cout << ex.what() << std::endl << std::endl;
|
||||
stacktrace();
|
||||
}
|
||||
}
|
||||
std::_Exit(EXIT_FAILURE);
|
||||
}
|
||||
#include "utils/terminate_handler.hpp"
|
||||
|
||||
int main()
|
||||
{
|
||||
std::set_terminate(&on_terminate);
|
||||
std::set_terminate(&terminate_handler);
|
||||
|
||||
ioc::Container container;
|
||||
|
||||
|
32
utils/terminate_handler.hpp
Normal file
32
utils/terminate_handler.hpp
Normal file
@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <execinfo.h>
|
||||
|
||||
// TODO: log to local file or remote database
|
||||
void stacktrace() noexcept
|
||||
{
|
||||
void *array[50];
|
||||
int size = backtrace(array, 50);
|
||||
std::cout << __FUNCTION__ << " backtrace returned " << size << " frames\n\n";
|
||||
char **messages = backtrace_symbols(array, size);
|
||||
for (int i = 0; i < size && messages != NULL; ++i) {
|
||||
std::cout << "[bt]: (" << i << ") " << messages[i] << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
free(messages);
|
||||
}
|
||||
|
||||
// TODO: log to local file or remote database
|
||||
void terminate_handler() noexcept
|
||||
{
|
||||
if (auto exc = std::current_exception()) {
|
||||
try {
|
||||
std::rethrow_exception(exc);
|
||||
} catch (std::exception &ex) {
|
||||
std::cout << ex.what() << std::endl << std::endl;
|
||||
stacktrace();
|
||||
}
|
||||
}
|
||||
std::_Exit(EXIT_FAILURE);
|
||||
}
|
Loading…
Reference in New Issue
Block a user