Install termination handler to collect additional information for C++ exceptions
This commit is contained in:
parent
853ba22b0d
commit
8e42daada7
@ -88,7 +88,6 @@ class SM:
|
||||
self.compiler.AddToListVar('POSTLINKFLAGS', '-m32')
|
||||
self.compiler.AddToListVar('POSTLINKFLAGS', '-Wl,-z,defs')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-std=c++11')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-Wno-non-virtual-dtor')
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-Wno-overloaded-virtual')
|
||||
|
@ -146,6 +146,27 @@ PluginInfo plugins[256];
|
||||
#endif
|
||||
|
||||
#if defined _LINUX
|
||||
void terminateHandler()
|
||||
{
|
||||
const char *msg = "missing exception";
|
||||
std::exception_ptr pEx = std::current_exception();
|
||||
if (pEx) {
|
||||
try {
|
||||
std::rethrow_exception(pEx);
|
||||
} catch(const std::exception &e) {
|
||||
msg = strdup(e.what());
|
||||
} catch(...) {
|
||||
msg = "unknown exception";
|
||||
}
|
||||
}
|
||||
|
||||
size_t msgLength = strlen(msg) + 2;
|
||||
volatile char * volatile msgForCrashDumps = (char *)alloca(msgLength);
|
||||
strcpy((char *)msgForCrashDumps + 1, msg);
|
||||
|
||||
abort();
|
||||
}
|
||||
|
||||
void (*SignalHandler)(int, siginfo_t *, void *);
|
||||
|
||||
const int kExceptionSignals[] = {
|
||||
@ -253,6 +274,8 @@ static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
|
||||
|
||||
void OnGameFrame(bool simulating)
|
||||
{
|
||||
std::set_terminate(terminateHandler);
|
||||
|
||||
bool weHaveBeenFuckedOver = false;
|
||||
struct sigaction oact;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user