5#include "flutter/fml/backtrace.h"
10#include "flutter/fml/build_config.h"
11#include "flutter/fml/logging.h"
12#include "flutter/fml/paths.h"
13#include "flutter/third_party/abseil-cpp/absl/debugging/symbolize.h"
29 if (!absl::Symbolize(symbol,
name,
sizeof(
name))) {
37 return CaptureStackBackTrace(0,
size, symbols, NULL);
39 return ::backtrace(symbols,
size);
44 constexpr size_t kMaxFrames = 256;
45 void* symbols[kMaxFrames];
46 const auto available_frames =
Backtrace(symbols, kMaxFrames);
47 if (available_frames <= 0) {
54 std::stringstream stream;
55 for (
int i =
offset; i < available_frames; ++i) {
56 stream <<
"Frame " << i -
offset <<
": " << symbols[i] <<
" "
96 return std::to_string(signal);
109 <<
" during program execution." << std::endl
120 if (::signal(signal_name, handler) == SIG_ERR) {
121 FML_LOG(
ERROR) <<
"Could not attach signal handler for " << signal_name;
128 if (!IsDebuggerPresent()) {
129 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
130 _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
134 if (exe_path.first) {
135 absl::InitializeSymbolizer(exe_path.second.c_str());
#define FML_LOG(severity)
std::pair< bool, std::string > GetExecutablePath()
constexpr std::size_t size(T(&array)[N])
static std::string GetSymbolName(void *symbol)
static size_t kKnownSignalHandlers[]
std::string BacktraceHere(size_t offset)
static std::string SignalNameToString(int signal)
bool IsCrashHandlingSupported()
static void ToggleSignalHandlers(bool set)
static int Backtrace(void **symbols, int size)
void InstallCrashHandler()
static void SignalHandler(int signal)
static std::string kKUnknownFrameName