mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Crash backtrace improvements
This commit is contained in:
parent
972c4764f0
commit
7c2ef7f709
2 changed files with 30 additions and 11 deletions
|
@ -34,10 +34,10 @@ add_definitions(
|
||||||
-DBP_DYNAMIC
|
-DBP_DYNAMIC
|
||||||
)
|
)
|
||||||
|
|
||||||
INCLUDE(CheckIncludeFiles)
|
INCLUDE(CheckIncludeFileCXX)
|
||||||
CHECK_INCLUDE_FILES(backtrace.h HAVE_BACKTRACE_HEADERS)
|
CHECK_INCLUDE_FILE_CXX(backtrace.h HAVE_BACKTRACE_HEADERS)
|
||||||
if (HAVE_BACKTRACE_HEADERS)
|
if (HAVE_BACKTRACE_HEADERS)
|
||||||
add_definitions(-DBFP_HAS_BACKTRACE)
|
add_definitions(-DBFP_HAS_BACKTRACE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (CMAKE_CXX_STANDARD 11)
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#ifdef BFP_BACKTRACE_PATH
|
#ifdef BFP_BACKTRACE_PATH
|
||||||
#include BFP_BACKTRACE_PATH
|
#include BFP_BACKTRACE_PATH
|
||||||
#else
|
#elif BFP_HAS_BACKTRACE
|
||||||
#include "backtrace.h"
|
#include "backtrace.h"
|
||||||
#include "backtrace-supported.h"
|
#include "backtrace-supported.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,6 +45,9 @@
|
||||||
#define BFP_ERRPRINTF(...) fprintf (stderr, __VA_ARGS__)
|
#define BFP_ERRPRINTF(...) fprintf (stderr, __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#include <cxxabi.h>
|
||||||
|
//using __cxxabiv1::__cxa_demangle;
|
||||||
|
|
||||||
USING_NS_BF;
|
USING_NS_BF;
|
||||||
|
|
||||||
struct BfpPipeInfo
|
struct BfpPipeInfo
|
||||||
|
@ -395,7 +398,7 @@ static String gUnwindExecStr;
|
||||||
static int gUnwindIdx = 0;
|
static int gUnwindIdx = 0;
|
||||||
|
|
||||||
static _Unwind_Reason_Code UnwindHandler(struct _Unwind_Context* context, void* ref)
|
static _Unwind_Reason_Code UnwindHandler(struct _Unwind_Context* context, void* ref)
|
||||||
{
|
{
|
||||||
gUnwindIdx++;
|
gUnwindIdx++;
|
||||||
if (gUnwindIdx < 2)
|
if (gUnwindIdx < 2)
|
||||||
return _URC_NO_REASON;
|
return _URC_NO_REASON;
|
||||||
|
@ -406,9 +409,14 @@ static _Unwind_Reason_Code UnwindHandler(struct _Unwind_Context* context, void*
|
||||||
gUnwindExecStr += StrFormat(" %p", addr);
|
gUnwindExecStr += StrFormat(" %p", addr);
|
||||||
#else
|
#else
|
||||||
Dl_info info;
|
Dl_info info;
|
||||||
if (dladdr(addr, &info) && info.dli_sname)
|
if (dladdr(addr, &info))
|
||||||
{
|
{
|
||||||
BFP_ERRPRINTF("0x%p %s\n", addr, info.dli_sname);
|
if (info.dli_sname)
|
||||||
|
BFP_ERRPRINTF("0x%p %s\n", addr, info.dli_sname);
|
||||||
|
else if (info.dli_fname)
|
||||||
|
BFP_ERRPRINTF("0x%p %s\n", addr, info.dli_fname);
|
||||||
|
else
|
||||||
|
BFP_ERRPRINTF("0x%p\n", addr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return _URC_NO_REASON;
|
return _URC_NO_REASON;
|
||||||
|
@ -457,7 +465,7 @@ static void Crashed()
|
||||||
|
|
||||||
size = backtrace(array, 64);
|
size = backtrace(array, 64);
|
||||||
strings = backtrace_symbols(array, size);
|
strings = backtrace_symbols(array, size);
|
||||||
|
|
||||||
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
||||||
BFP_ERRPRINTF("%s\n", strings[i]);
|
BFP_ERRPRINTF("%s\n", strings[i]);
|
||||||
|
|
||||||
|
@ -503,9 +511,20 @@ BFP_EXPORT void BFP_CALLTYPE BfpSystem_Init(int version, BfpSystemInitFlags flag
|
||||||
BfpSystem_FatalError(StrFormat("Bfp build version '%d' does not match requested version '%d'", BFP_VERSION, version).c_str(), "BFP FATAL ERROR");
|
BfpSystem_FatalError(StrFormat("Bfp build version '%d' does not match requested version '%d'", BFP_VERSION, version).c_str(), "BFP FATAL ERROR");
|
||||||
}
|
}
|
||||||
|
|
||||||
signal(SIGSEGV, SigHandler);
|
//if (ptrace(PTRACE_TRACEME, 0, 1, 0) != -1)
|
||||||
signal(SIGFPE, SigHandler);
|
{
|
||||||
signal(SIGABRT, SigHandler);
|
//ptrace(PTRACE_DETACH, 0, 1, 0);
|
||||||
|
//signal(SIGSEGV, SigHandler);
|
||||||
|
//signal(SIGFPE, SigHandler);
|
||||||
|
//signal(SIGABRT, SigHandler);
|
||||||
|
|
||||||
|
/*struct sigaction action;
|
||||||
|
memset(&action, 0, sizeof(action));
|
||||||
|
action.sa_sigaction = signal_segv;
|
||||||
|
action.sa_flags = SA_SIGINFO;
|
||||||
|
if(sigaction(SIGSEGV, &action, NULL) < 0)
|
||||||
|
perror("sigaction");*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BFP_EXPORT void BFP_CALLTYPE BfpSystem_SetCommandLine(int argc, char** argv)
|
BFP_EXPORT void BFP_CALLTYPE BfpSystem_SetCommandLine(int argc, char** argv)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue