#if __GNUC__ # include # include # include # include # include # include # include namespace { void handle(int sig) { fmt::print(stderr, "Error: signal {}:\n", sig); auto ary = std::array(); // get void*'s for all entries on the stack auto size = backtrace(ary.data(), static_cast(ary.size())); // print out all the frames to stderr fmt::print(stderr, "Error: signal {}. See stacktrace with\n", sig); fmt::print(stderr, "addr2line -Cafpie ./test/udm-test"); for (size_t i = 0; i < static_cast(size); ++i) { fmt::print(stderr, " {}", ary[i]); } exit(1); // NOLINT(concurrency-mt-unsafe) } class handler { public: handler() { (void)signal(SIGTERM, handle); } }; auto const global_h = handler(); } // namespace #endif