mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 05:27:19 +00:00
Improve Diagnostics logging (#841)
Improve diagnostics to write the file name and signal to the log file should there be a crash.
This commit is contained in:
parent
d382eb3bc2
commit
1556f580d6
@ -1,4 +1,6 @@
|
|||||||
#include "Diagnostics.h"
|
#include "Diagnostics.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "dLogger.h"
|
||||||
|
|
||||||
// If we're on Win32, we'll include our minidump writer
|
// If we're on Win32, we'll include our minidump writer
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -26,7 +28,7 @@ void make_minidump(EXCEPTION_POINTERS* e) {
|
|||||||
"_%4d%02d%02d_%02d%02d%02d.dmp",
|
"_%4d%02d%02d_%02d%02d%02d.dmp",
|
||||||
t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond);
|
t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond);
|
||||||
}
|
}
|
||||||
|
Game::logger->Log("Diagnostics", "Creating crash dump %s", name);
|
||||||
auto hFile = CreateFileA(name, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
auto hFile = CreateFileA(name, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
return;
|
return;
|
||||||
@ -81,6 +83,7 @@ struct bt_ctx {
|
|||||||
|
|
||||||
static inline void Bt(struct backtrace_state* state) {
|
static inline void Bt(struct backtrace_state* state) {
|
||||||
std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log";
|
std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log";
|
||||||
|
Game::logger->Log("Diagnostics", "backtrace is enabled, crash dump located at %s", fileName.c_str());
|
||||||
FILE* file = fopen(fileName.c_str(), "w+");
|
FILE* file = fopen(fileName.c_str(), "w+");
|
||||||
if (file != nullptr) {
|
if (file != nullptr) {
|
||||||
backtrace_print(state, 2, file);
|
backtrace_print(state, 2, file);
|
||||||
@ -114,6 +117,8 @@ void GenerateDump() {
|
|||||||
void CatchUnhandled(int sig) {
|
void CatchUnhandled(int sig) {
|
||||||
#ifndef __include_backtrace__
|
#ifndef __include_backtrace__
|
||||||
|
|
||||||
|
std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log";
|
||||||
|
Game::logger->Log("Diagnostics", "Encountered signal %i, creating crash dump %s", sig, fileName.c_str());
|
||||||
if (Diagnostics::GetProduceMemoryDump()) {
|
if (Diagnostics::GetProduceMemoryDump()) {
|
||||||
GenerateDump();
|
GenerateDump();
|
||||||
}
|
}
|
||||||
@ -124,7 +129,6 @@ void CatchUnhandled(int sig) {
|
|||||||
// get void*'s for all entries on the stack
|
// get void*'s for all entries on the stack
|
||||||
size = backtrace(array, 10);
|
size = backtrace(array, 10);
|
||||||
|
|
||||||
printf("Fatal error %i\nStacktrace:\n", sig);
|
|
||||||
#if defined(__GNUG__) and defined(__dynamic)
|
#if defined(__GNUG__) and defined(__dynamic)
|
||||||
|
|
||||||
// Loop through the returned addresses, and get the symbols to be demangled
|
// Loop through the returned addresses, and get the symbols to be demangled
|
||||||
@ -142,19 +146,18 @@ void CatchUnhandled(int sig) {
|
|||||||
demangled = demangle(functionName.c_str());
|
demangled = demangle(functionName.c_str());
|
||||||
|
|
||||||
if (demangled.empty()) {
|
if (demangled.empty()) {
|
||||||
printf("[%02zu] %s\n", i, demangled.c_str());
|
Game::logger->Log("Diagnostics", "[%02zu] %s", i, demangled.c_str());
|
||||||
} else {
|
} else {
|
||||||
printf("[%02zu] %s\n", i, functionName.c_str());
|
Game::logger->Log("Diagnostics", "[%02zu] %s", i, functionName.c_str());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("[%02zu] %s\n", i, functionName.c_str());
|
Game::logger->Log("Diagnostics", "[%02zu] %s", i, functionName.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
backtrace_symbols_fd(array, size, STDOUT_FILENO);
|
backtrace_symbols_fd(array, size, STDOUT_FILENO);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::string fileName = Diagnostics::GetOutDirectory() + "crash_" + Diagnostics::GetProcessName() + "_" + std::to_string(getpid()) + ".log";
|
|
||||||
FILE* file = fopen(fileName.c_str(), "w+");
|
FILE* file = fopen(fileName.c_str(), "w+");
|
||||||
if (file != NULL) {
|
if (file != NULL) {
|
||||||
// print out all the frames to stderr
|
// print out all the frames to stderr
|
||||||
|
Loading…
Reference in New Issue
Block a user