mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 04:28:49 +03:00
Get rid of boost dependency for stacktraces
This commit is contained in:
parent
a2c4d0875c
commit
9f7064676c
4 changed files with 48 additions and 7 deletions
|
@ -265,7 +265,10 @@ set(PROJECT_VERSION ${CPACK_PACKAGE_VERSION})
|
|||
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||
|
||||
cmake_host_system_information(RESULT BUILD_HOST QUERY HOSTNAME)
|
||||
set(BUILD_USER $ENV{USER})
|
||||
|
||||
include(CheckSymbolExists)
|
||||
check_symbol_exists(backtrace_symbols_fd "execinfo.h" HAVE_BACKTRACE_SYMBOLS_FD)
|
||||
|
||||
configure_file(cmake/nheko.h config/nheko.h)
|
||||
|
||||
|
||||
|
@ -607,6 +610,10 @@ if(WIN32)
|
|||
target_compile_definitions(nheko PRIVATE _WIN32_WINNT=0x0601)
|
||||
else()
|
||||
add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS})
|
||||
|
||||
if (HAVE_BACKTRACE_SYMBOLS_FD AND NOT CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
set_target_properties(nheko PROPERTIES ENABLE_EXPORTS ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
namespace nheko {
|
||||
constexpr auto version = "${PROJECT_VERSION}";
|
||||
constexpr auto build_user = "${BUILD_USER}@${BUILD_HOST}";
|
||||
constexpr auto build_os = "${CMAKE_HOST_SYSTEM_NAME}";
|
||||
constexpr auto enable_debug_log = ${SPDLOG_DEBUG_ON};
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
#define HAVE_BACKTRACE_SYMBOLS_FD ${HAVE_BACKTRACE_SYMBOLS_FD}
|
||||
// clang-format on
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
|
||||
#include <memory>
|
||||
#include <mtx/events.hpp>
|
||||
#include <mtx/events/encrypted.hpp>
|
||||
|
|
39
src/main.cpp
39
src/main.cpp
|
@ -40,15 +40,48 @@
|
|||
QQmlDebuggingEnabler enabler;
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_LINUX)
|
||||
#include <boost/stacktrace.hpp>
|
||||
#if HAVE_BACKTRACE_SYMBOLS_FD
|
||||
#include <csignal>
|
||||
#include <execinfo.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void
|
||||
stacktraceHandler(int signum)
|
||||
{
|
||||
std::signal(signum, SIG_DFL);
|
||||
boost::stacktrace::safe_dump_to("./nheko-backtrace.dump");
|
||||
|
||||
// boost::stacktrace::safe_dump_to("./nheko-backtrace.dump");
|
||||
|
||||
// see
|
||||
// https://stackoverflow.com/questions/77005/how-to-automatically-generate-a-stacktrace-when-my-program-crashes/77336#77336
|
||||
void *array[50];
|
||||
size_t size;
|
||||
|
||||
// get void*'s for all entries on the stack
|
||||
size = backtrace(array, 50);
|
||||
|
||||
// print out all the frames to stderr
|
||||
fprintf(stderr, "Error: signal %d:\n", signum);
|
||||
backtrace_symbols_fd(array, size, STDERR_FILENO);
|
||||
|
||||
int file = ::open("/tmp/nheko-crash.dump",
|
||||
O_CREAT | O_WRONLY | O_TRUNC
|
||||
#if defined(S_IWUSR) && defined(S_IRUSR)
|
||||
,
|
||||
S_IWUSR | S_IRUSR
|
||||
#elif defined(S_IWRITE) && defined(S_IREAD)
|
||||
,
|
||||
S_IWRITE | S_IREAD
|
||||
#endif
|
||||
);
|
||||
if (file != -1) {
|
||||
constexpr char header[] = "Error: signal\n";
|
||||
write(file, header, std::size(header) - 1);
|
||||
backtrace_symbols_fd(array, size, file);
|
||||
close(file);
|
||||
}
|
||||
|
||||
std::raise(SIGABRT);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue