aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-28 18:37:51 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-28 18:37:51 +0100
commite0fb4445cd2f5f4bb94ea23122548debddc41ba6 (patch)
treea2850cbf86c3097ef99c4bc7cb3255e2b22da63c /src
parente43529933fbedb02c9e4b636b6e1d9d94398e5e6 (diff)
Core/Debugging: Added wheaty everywhere and modified it to always reliably report issues during static initialization
Diffstat (limited to 'src')
-rw-r--r--src/common/CMakeLists.txt8
-rw-r--r--src/common/Debugging/WheatyExceptionReport.cpp12
-rw-r--r--src/common/Debugging/WheatyExceptionReport.h3
-rw-r--r--src/server/CMakeLists.txt2
-rw-r--r--src/server/bnetserver/Main.cpp2
-rw-r--r--src/server/worldserver/Main.cpp2
-rw-r--r--src/tools/connection_patcher/Program.cpp2
-rw-r--r--src/tools/mmaps_generator/PathGenerator.cpp2
-rw-r--r--src/tools/vmap4_assembler/VMapAssembler.cpp4
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp2
10 files changed, 26 insertions, 13 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 0428738f2dd..231951ed283 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -12,17 +12,9 @@ CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES
# Exclude
- ${CMAKE_CURRENT_SOURCE_DIR}/Debugging
${CMAKE_CURRENT_SOURCE_DIR}/Platform
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
-# Manually set sources for Debugging directory as we don't want to include WheatyExceptionReport in common project
-# It needs to be included both in authserver and worldserver for the static global variable to be properly initialized
-# and to handle crash logs on windows
-list(APPEND PRIVATE_SOURCES
- ${CMAKE_CURRENT_SOURCE_DIR}/Debugging/Errors.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/Debugging/Errors.h)
-
if (USE_COREPCH)
set(PRIVATE_PCH_HEADER PrecompiledHeaders/commonPCH.h)
set(PRIVATE_PCH_SOURCE PrecompiledHeaders/commonPCH.cpp)
diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp
index 72abec161b9..29d9a35af8a 100644
--- a/src/common/Debugging/WheatyExceptionReport.cpp
+++ b/src/common/Debugging/WheatyExceptionReport.cpp
@@ -50,8 +50,11 @@ inline LPTSTR ErrorMessage(DWORD dw)
//============================== Global Variables =============================
//
-// Declare the static variables of the WheatyExceptionReport class
+// Declare the static variables of the WheatyExceptionReport class and force their initialization before any other static in the program
//
+#pragma warning(push)
+#pragma warning(disable: 4073) // C4073: initializers put in library initialization area
+#pragma init_seg(lib)
TCHAR WheatyExceptionReport::m_szLogFileName[MAX_PATH];
TCHAR WheatyExceptionReport::m_szDumpFileName[MAX_PATH];
LPTOP_LEVEL_EXCEPTION_FILTER WheatyExceptionReport::m_previousFilter;
@@ -65,9 +68,9 @@ bool WheatyExceptionReport::alreadyCrashed;
std::mutex WheatyExceptionReport::alreadyCrashedLock;
WheatyExceptionReport::pRtlGetVersion WheatyExceptionReport::RtlGetVersion;
-
// Declare global instance of class
WheatyExceptionReport g_WheatyExceptionReport;
+#pragma warning(pop)
//============================== Class Methods =============================
@@ -1460,3 +1463,8 @@ char* WheatyExceptionReport::PrintSymbolDetail(char* pszCurrBuffer)
}
#endif // _WIN32
+
+void InitializeCrashHandler()
+{
+ // dummy call to make the linker not discard the compilation unit
+}
diff --git a/src/common/Debugging/WheatyExceptionReport.h b/src/common/Debugging/WheatyExceptionReport.h
index 34919b19e01..de6b6f375e3 100644
--- a/src/common/Debugging/WheatyExceptionReport.h
+++ b/src/common/Debugging/WheatyExceptionReport.h
@@ -210,5 +210,8 @@ class WheatyExceptionReport
extern WheatyExceptionReport g_WheatyExceptionReport; // global instance of class
#endif // _WIN32
+
+// dummy call to make the linker not discard the compilation unit
+void InitializeCrashHandler();
#endif // _WHEATYEXCEPTIONREPORT_
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index 0a8d9ff2c19..d600de2f35f 100644
--- a/src/server/CMakeLists.txt
+++ b/src/server/CMakeLists.txt
@@ -18,8 +18,6 @@ endif()
if(WIN32)
set(sources_windows
- ${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.cpp
- ${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.h
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.cpp
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.h
)
diff --git a/src/server/bnetserver/Main.cpp b/src/server/bnetserver/Main.cpp
index 56eff7c0c07..a17872303d2 100644
--- a/src/server/bnetserver/Main.cpp
+++ b/src/server/bnetserver/Main.cpp
@@ -32,6 +32,7 @@
#include "SslContext.h"
#include "DatabaseLoader.h"
#include "LoginRESTService.h"
+#include "WheatyExceptionReport.h"
#include <iostream>
#include <boost/program_options.hpp>
#include <boost/filesystem/path.hpp>
@@ -77,6 +78,7 @@ static uint32 _banExpiryCheckInterval;
int main(int argc, char** argv)
{
+ InitializeCrashHandler();
signal(SIGABRT, &Trinity::AbortHandler);
auto configFile = fs::absolute(_TRINITY_BNET_CONFIG);
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 68c48853bad..293afc4757c 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -47,6 +47,7 @@
#include "DatabaseLoader.h"
#include "AppenderDB.h"
#include "Metric.h"
+#include "WheatyExceptionReport.h"
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
#include <boost/asio/io_service.hpp>
@@ -99,6 +100,7 @@ variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile, s
/// Launch the Trinity server
extern int main(int argc, char** argv)
{
+ InitializeCrashHandler();
signal(SIGABRT, &Trinity::AbortHandler);
auto configFile = fs::absolute(_TRINITY_CORE_CONFIG);
diff --git a/src/tools/connection_patcher/Program.cpp b/src/tools/connection_patcher/Program.cpp
index 354cfa17191..b19d4f1914f 100644
--- a/src/tools/connection_patcher/Program.cpp
+++ b/src/tools/connection_patcher/Program.cpp
@@ -27,6 +27,7 @@
#include "Banner.h"
#include "CompilerDefs.h"
+#include "WheatyExceptionReport.h"
#include <boost/algorithm/string/replace.hpp>
#include <boost/program_options.hpp>
@@ -128,6 +129,7 @@ namespace Connection_Patcher
int main(int argc, char** argv)
{
+ InitializeCrashHandler();
using namespace Connection_Patcher;
try
diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp
index b396bdf5a3c..c2c0146eb12 100644
--- a/src/tools/mmaps_generator/PathGenerator.cpp
+++ b/src/tools/mmaps_generator/PathGenerator.cpp
@@ -22,6 +22,7 @@
#include "MapBuilder.h"
#include "Timer.h"
#include "Banner.h"
+#include "WheatyExceptionReport.h"
using namespace MMAP;
@@ -242,6 +243,7 @@ int finish(const char* message, int returnValue)
int main(int argc, char** argv)
{
+ InitializeCrashHandler();
Trinity::Banner::Show("MMAP generator", [](char const* text) { printf("%s\n", text); }, nullptr);
int threads = 3, mapnum = -1;
diff --git a/src/tools/vmap4_assembler/VMapAssembler.cpp b/src/tools/vmap4_assembler/VMapAssembler.cpp
index a407e80ff14..ef5b93c25ac 100644
--- a/src/tools/vmap4_assembler/VMapAssembler.cpp
+++ b/src/tools/vmap4_assembler/VMapAssembler.cpp
@@ -21,13 +21,15 @@
#include "TileAssembler.h"
#include "Banner.h"
+#include "WheatyExceptionReport.h"
int main(int argc, char* argv[])
{
+ InitializeCrashHandler();
Trinity::Banner::Show("VMAP assembler", [](char const* text) { std::cout << text << std::endl; }, nullptr);
std::string src = "Buildings";
- std::string dest = "vmaps";
+ std::string dest = "vmaps";
if (argc > 3)
{
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp
index 0e788dc4d4c..17ae93eb484 100644
--- a/src/tools/vmap4_extractor/vmapexport.cpp
+++ b/src/tools/vmap4_extractor/vmapexport.cpp
@@ -50,6 +50,7 @@
#include "vmapexport.h"
#include "Banner.h"
+#include "WheatyExceptionReport.h"
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
@@ -491,6 +492,7 @@ bool processArgv(int argc, char ** argv, const char *versionString)
int main(int argc, char ** argv)
{
+ InitializeCrashHandler();
Trinity::Banner::Show("VMAP data extractor", [](char const* text) { printf("%s\n", text); }, nullptr);
bool success = true;