ExceptionHandler: add Android support for stack trace

This commit is contained in:
SSimco 2026-05-09 16:54:45 +03:00
parent e75d2fe9c6
commit ee17e2b5ba
2 changed files with 15 additions and 3 deletions

View File

@ -13,7 +13,11 @@
#include "ELFSymbolTable.h"
#endif
#if BOOST_OS_LINUX
#if BOOST_PLAT_ANDROID
#include <boost/stacktrace.hpp>
#endif
#if BOOST_OS_LINUX && !BOOST_PLAT_ANDROID
void DemangleAndPrintBacktrace(char** backtrace, size_t size)
{
ELFSymbolTable symTable;
@ -81,13 +85,18 @@ void handlerDumpingSignal(int sig, siginfo_t *info, void *context)
if (sigName)
{
printf("%s!\n", sigName);
CrashLog_WriteLine(fmt::format("Error: signal {}:", sigName));
}
else
{
// should never be the case
printf("Unknown core dumping signal!\n");
CrashLog_WriteLine(fmt::format("Error: signal {}:", sig));
}
#if BOOST_PLAT_ANDROID
CrashLog_WriteLine(to_string(boost::stacktrace::stacktrace()));
#else
void* backtraceArray[128];
size_t size;
@ -99,8 +108,6 @@ void handlerDumpingSignal(int sig, siginfo_t *info, void *context)
backtraceArray[0] = (void *)uc->uc_mcontext.gregs[REG_RIP];
#endif
CrashLog_WriteLine(fmt::format("Error: signal {}:", sig));
#if BOOST_OS_LINUX
char** symbol_trace = backtrace_symbols(backtraceArray, size);
@ -115,6 +122,7 @@ void handlerDumpingSignal(int sig, siginfo_t *info, void *context)
}
#else
backtrace_symbols_fd(backtraceArray, size, STDERR_FILENO);
#endif
#endif
std::cerr << fmt::format("\nStacktrace and additional info written to:") << std::endl;

View File

@ -31,6 +31,10 @@
"name": "boost-iostreams",
"platform": "android"
},
{
"name": "boost-stacktrace",
"platform": "android"
},
{
"name": "boost-context",
"platform": "android"