Skip to content

Commit dc65581

Browse files
authored
Merge pull request #527 from cortex-command-community/AbortRestart-AssertIgnore
Crash Handling Improvements
2 parents 21e3c58 + 7d744cd commit dc65581

20 files changed

+2882
-71
lines changed

.github/workflows/meson.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
CC: "gcc"
6969
CXX: "g++"
7070
run: |
71-
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} build
71+
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} -Db_lto=true build
7272
7373
- name: Configure for AppImage
7474
if: ${{inputs.upload_artefacts}}
@@ -133,7 +133,7 @@ jobs:
133133
CXX: "g++-12"
134134
LDFLAGS: "-static-libgcc -static-libstdc++"
135135
run: |
136-
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} build
136+
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} -Db_lto=false build
137137
meson compile -C build
138138
139139
- name: Artifact Deploy

Main.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,16 @@ namespace RTE {
360360

361361
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
362362

363+
/// <summary>
364+
/// Self-invoking lambda that installs exception handlers before Main is executed.
365+
/// </summary>
366+
static const bool RTESetExceptionHandlers = []() {
367+
RTEError::SetExceptionHandlers();
368+
return true;
369+
}();
370+
371+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
372+
363373
/// <summary>
364374
/// Implementation of the main function.
365375
/// </summary>
@@ -380,7 +390,9 @@ int main(int argc, char **argv) {
380390
SDL_GameControllerAddMappingsFromFile("Base.rte/gamecontrollerdb.txt");
381391
}
382392

383-
System::Initialize();
393+
// argv[0] actually unreliable for exe path and name, because of course, why would it be, why would anything be simple and make sense.
394+
// Just use it anyway until some dumb edge case pops up and it becomes a problem.
395+
System::Initialize(argv[0]);
384396
SeedRNG();
385397

386398
InitializeManagers();

Managers/ConsoleMan.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,17 @@ namespace RTE {
183183

184184
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
185185

186-
void ConsoleMan::SaveAllText(const std::string &filePath) {
186+
bool ConsoleMan::SaveAllText(const std::string &filePath) {
187187
Writer logWriter(filePath.c_str());
188188
if (logWriter.WriterOK()) {
189189
for (const std::string &loggedString : m_OutputLog) {
190190
logWriter << loggedString;
191191
}
192+
logWriter.EndWrite();
192193
PrintString("SYSTEM: Entire console contents saved to " + filePath);
194+
return true;
193195
}
196+
return false;
194197
}
195198

196199
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Managers/ConsoleMan.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ namespace RTE {
122122
/// Writes the entire console buffer to a file.
123123
/// </summary>
124124
/// <param name="filePath">The filename of the file to write to.</param>
125-
void SaveAllText(const std::string &filePath);
125+
/// <returns>Whether writing to the file was successful.</returns>
126+
bool SaveAllText(const std::string &filePath);
126127

127128
/// <summary>
128129
/// Clears all previous input.

RTEA.vcxproj

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,10 @@
205205
<ConformanceMode>true</ConformanceMode>
206206
<IncludeInUnityFile>false</IncludeInUnityFile>
207207
<AddCodeAfterSourceInclude>#undef GetClassName</AddCodeAfterSourceInclude>
208+
<OmitFramePointers>false</OmitFramePointers>
208209
</ClCompile>
209210
<Link>
210-
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;setupapi.lib;version.lib;imm32.lib;fmod_vc.lib;allegro-debug.lib;loadpng-debug.lib;liblz4_debug_static.lib;luajit-debug.lib;luabind-debug.lib;raknet-debug.lib;sdl2main-debug.lib;sdl2-debug.lib;opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
211+
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;setupapi.lib;version.lib;imm32.lib;fmod_vc.lib;allegro-debug.lib;loadpng-debug.lib;liblz4_debug_static.lib;luajit-debug.lib;luabind-debug.lib;raknet-debug.lib;sdl2main-debug.lib;sdl2-debug.lib;opengl32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
211212
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
212213
<AdditionalLibraryDirectories>external\sources\zlib-ng-2.1.3\_Bin;external\sources\libpng-1.6.40\_Bin;external\sources\allegro 4.4.3.1-custom\_Bin;external\sources\SDL2-2.26.3\_Bin;external\sources\luabind-0.7.1\_Bin;external\sources\LuaJIT-2.1\_Bin;external\sources\RakNet\_Bin;external\sources\minizip-ng-4.0.0\_Bin;external\lib\win;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
213214
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -308,9 +309,10 @@
308309
<ConformanceMode>true</ConformanceMode>
309310
<IncludeInUnityFile>false</IncludeInUnityFile>
310311
<AddCodeAfterSourceInclude>#undef GetClassName</AddCodeAfterSourceInclude>
312+
<OmitFramePointers>false</OmitFramePointers>
311313
</ClCompile>
312314
<Link>
313-
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;setupapi.lib;version.lib;imm32.lib;fmod_vc.lib;allegro-debug.lib;loadpng-debug.lib;liblz4_debug_static.lib;luajit-debug-release.lib;luabind-debug.lib;raknet-debug.lib;sdl2main-debug.lib;sdl2-debug.lib;opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
315+
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;setupapi.lib;version.lib;imm32.lib;fmod_vc.lib;allegro-debug.lib;loadpng-debug.lib;liblz4_debug_static.lib;luajit-debug-release.lib;luabind-debug.lib;raknet-debug.lib;sdl2main-debug.lib;sdl2-debug.lib;opengl32.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
314316
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
315317
<AdditionalLibraryDirectories>external\sources\zlib-ng-2.1.3\_Bin;external\sources\libpng-1.6.40\_Bin;external\sources\allegro 4.4.3.1-custom\_Bin;external\sources\SDL2-2.26.3\_Bin;external\sources\luabind-0.7.1\_Bin;external\sources\LuaJIT-2.1\_Bin;external\sources\RakNet\_Bin;external\sources\minizip-ng-4.0.0\_Bin;external\lib\win;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
316318
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -340,7 +342,7 @@
340342
<Optimization>MaxSpeed</Optimization>
341343
<IntrinsicFunctions>true</IntrinsicFunctions>
342344
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
343-
<WholeProgramOptimization>true</WholeProgramOptimization>
345+
<WholeProgramOptimization>false</WholeProgramOptimization>
344346
<AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)System;$(ProjectDir)Lua;$(ProjectDir)Entities;$(ProjectDir)Activities;$(ProjectDir)Managers;$(ProjectDir)Menus;$(ProjectDir)GUI;$(ProjectDir)GUI\Wrappers;$(ProjectDir)external\include\win;$(ProjectDir)external\include\common\;$(ProjectDir)external\include\common\boost_1_75;$(ProjectDir)external\include\win\LZ4;$(ProjectDir)external\include\common\fmod;$(ProjectDir)external\sources\libpng-1.6.40\include;$(ProjectDir)external\sources\zlib-ng-2.1.3\include;$(ProjectDir)external\sources\allegro 4.4.3.1-custom\include;$(ProjectDir)external\sources\allegro 4.4.3.1-custom\addons\loadpng;$(ProjectDir)external\sources\SDL2-2.26.3\include;$(ProjectDir)external\sources\LuaJIT-2.1\src;$(ProjectDir)external\sources\luabind-0.7.1\;$(ProjectDir)external\sources\luabind-0.7.1\luabind;$(ProjectDir)external\sources\RakNet\include;$(ProjectDir)external\sources\minizip-ng-4.0.0\include;$(ProjectDir)external\sources\minizip-ng-4.0.0\src</AdditionalIncludeDirectories>
345347
<PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32_LEAN_AND_MEAN;ALLEGRO_STATICLINK;ALLEGRO_NO_STD_HEADERS;ALLEGRO_NO_MAGIC_MAIN;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;ZLIB_COMPAT;_WINDOWS;WIN32;DEBUG_RELEASE_BUILD;NDEBUG;TARGET_MACHINE_X86;%(PreprocessorDefinitions)</PreprocessorDefinitions>
346348
<ExceptionHandling>Sync</ExceptionHandling>
@@ -429,7 +431,7 @@
429431
<AddCodeAfterSourceInclude>#undef GetClassName</AddCodeAfterSourceInclude>
430432
</ClCompile>
431433
<Link>
432-
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;fmod_vc.lib;allegro-debug-release.lib;loadpng-debug-release.lib;liblz4_release_static.lib;luajit-debug-release.lib;luabind-debug-release.lib;raknet-release.lib;opengl32.lib;SDL2.lib;%(AdditionalDependencies)</AdditionalDependencies>
434+
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;fmod_vc.lib;allegro-debug-release.lib;loadpng-debug-release.lib;liblz4_release_static.lib;luajit-debug-release.lib;luabind-debug-release.lib;raknet-release.lib;opengl32.lib;SDL2.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
433435
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
434436
<AdditionalLibraryDirectories>external\sources\zlib-ng-2.1.3\_Bin;external\sources\libpng-1.6.40\_Bin;external\sources\allegro 4.4.3.1-custom\_Bin;external\sources\SDL2-2.26.3\_Bin;external\sources\luabind-0.7.1\_Bin;external\sources\LuaJIT-2.1\_Bin;external\sources\RakNet\_Bin;external\sources\minizip-ng-4.0.0\_Bin;external\lib\win;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
435437
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -490,7 +492,7 @@
490492
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic-32.lib;libminizip-32.lib;libpng16-static-32.lib;fmodL_vc.lib;allegro-release-32.lib;loadpng-release-32.lib;liblz4_release_static.lib;luajit-release-32.lib;luabind-release-32.lib;raknet-release-32.lib;opengl32.lib;SDL2-32.lib;%(AdditionalDependencies)</AdditionalDependencies>
491493
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
492494
<AdditionalLibraryDirectories>external\sources\zlib-ng-2.1.3\_Bin;external\sources\libpng-1.6.40\_Bin;external\sources\allegro 4.4.3.1-custom\_Bin;external\sources\SDL2-2.26.3\_Bin;external\sources\luabind-0.7.1\_Bin;external\sources\LuaJIT-2.1\_Bin;external\sources\RakNet\_Bin;external\sources\minizip-ng-4.0.0\_Bin;external\lib\win\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
493-
<GenerateDebugInformation>false</GenerateDebugInformation>
495+
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
494496
<SubSystem>Windows</SubSystem>
495497
<LargeAddressAware>true</LargeAddressAware>
496498
<OptimizeReferences>true</OptimizeReferences>
@@ -547,10 +549,10 @@
547549
<AddCodeAfterSourceInclude>#undef GetClassName</AddCodeAfterSourceInclude>
548550
</ClCompile>
549551
<Link>
550-
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;fmod_vc.lib;allegro-release.lib;loadpng-release.lib;liblz4_release_static.lib;luajit-release.lib;luabind-release.lib;raknet-release.lib;opengl32.lib;SDL2.lib;%(AdditionalDependencies)</AdditionalDependencies>
552+
<AdditionalDependencies>winmm.lib;ws2_32.lib;dinput8.lib;ddraw.lib;dxguid.lib;dsound.lib;zlibstatic.lib;libminizip.lib;libpng16-static.lib;fmod_vc.lib;allegro-release.lib;loadpng-release.lib;liblz4_release_static.lib;luajit-release.lib;luabind-release.lib;raknet-release.lib;opengl32.lib;SDL2.lib;dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
551553
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
552554
<AdditionalLibraryDirectories>external\sources\zlib-ng-2.1.3\_Bin;external\sources\libpng-1.6.40\_Bin;external\sources\allegro 4.4.3.1-custom\_Bin;external\sources\SDL2-2.26.3\_Bin;external\sources\luabind-0.7.1\_Bin;external\sources\LuaJIT-2.1\_Bin;external\sources\RakNet\_Bin;external\sources\minizip-ng-4.0.0\_Bin;external\lib\win;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
553-
<GenerateDebugInformation>false</GenerateDebugInformation>
555+
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
554556
<SubSystem>Windows</SubSystem>
555557
<LargeAddressAware>true</LargeAddressAware>
556558
<OptimizeReferences>true</OptimizeReferences>
@@ -634,6 +636,8 @@
634636
<ClInclude Include="System\Semver200\semver200.h" />
635637
<ClInclude Include="System\Semver200\version.h" />
636638
<ClInclude Include="System\SpatialPartitionGrid.h" />
639+
<ClInclude Include="System\RTEStackTrace.h" />
640+
<ClInclude Include="System\StackWalker\StackWalker.h" />
637641
<ClInclude Include="System\StandardIncludes.h" />
638642
<ClInclude Include="System\Box.h" />
639643
<ClInclude Include="System\Color.h" />
@@ -864,6 +868,8 @@
864868
<ClCompile Include="System\Semver200\Semver200_parser.cpp" />
865869
<ClCompile Include="System\Serializable.cpp" />
866870
<ClCompile Include="System\SpatialPartitionGrid.cpp" />
871+
<ClCompile Include="System\RTEStackTrace.cpp" />
872+
<ClCompile Include="System\StackWalker\StackWalker.cpp" />
867873
<ClCompile Include="System\StandardIncludes.cpp">
868874
<PrecompiledHeader>Create</PrecompiledHeader>
869875
<PrecompiledHeaderFile>StandardIncludes.h</PrecompiledHeaderFile>

RTEA.vcxproj.filters

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
<Filter Include="GUI\Wrappers">
3535
<UniqueIdentifier>{14ff3fdb-4366-4bed-8b6e-ddcf72987b81}</UniqueIdentifier>
3636
</Filter>
37+
<Filter Include="System\StackWalker">
38+
<UniqueIdentifier>{a8668dc1-51c5-418d-91bf-7ee92f008cb1}</UniqueIdentifier>
39+
</Filter>
3740
</ItemGroup>
3841
<ItemGroup>
3942
<ClInclude Include="System\Box.h">
@@ -582,6 +585,12 @@
582585
<ClInclude Include="System\GameVersion.h">
583586
<Filter>System</Filter>
584587
</ClInclude>
588+
<ClInclude Include="System\StackWalker\StackWalker.h">
589+
<Filter>System\StackWalker</Filter>
590+
</ClInclude>
591+
<ClInclude Include="System\RTEStackTrace.h">
592+
<Filter>System</Filter>
593+
</ClInclude>
585594
</ItemGroup>
586595
<ItemGroup>
587596
<ClCompile Include="System\Box.cpp">
@@ -1125,6 +1134,12 @@
11251134
<ClCompile Include="System\Semver200\Semver200_parser.cpp">
11261135
<Filter>System\Semver200</Filter>
11271136
</ClCompile>
1137+
<ClCompile Include="System\StackWalker\StackWalker.cpp">
1138+
<Filter>System\StackWalker</Filter>
1139+
</ClCompile>
1140+
<ClCompile Include="System\RTEStackTrace.cpp">
1141+
<Filter>System</Filter>
1142+
</ClCompile>
11281143
</ItemGroup>
11291144
<ItemGroup>
11301145
<Image Include="Resources\ccicon.ico">

0 commit comments

Comments
 (0)