diff options
| author | Dan Engelbrecht <[email protected]> | 2024-05-03 15:09:35 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-05-03 15:09:35 +0200 |
| commit | 75b91b3f2eb21332a35255eae3c523ad2d2e9bc7 (patch) | |
| tree | d0db8b85af12bff7acbfe8a8e091169e89307b8b /src/zencore/include | |
| parent | 5.5.1 (diff) | |
| download | zen-75b91b3f2eb21332a35255eae3c523ad2d2e9bc7.tar.xz zen-75b91b3f2eb21332a35255eae3c523ad2d2e9bc7.zip | |
assert improvements (#72)
- Improvement: Asserts gives an immediate ERROR log entry with callstack and reason
- Improvement: Asserts flushes the log before sending error report to Sentry
Diffstat (limited to 'src/zencore/include')
| -rw-r--r-- | src/zencore/include/zencore/logging.h | 1 | ||||
| -rw-r--r-- | src/zencore/include/zencore/zencore.h | 35 |
2 files changed, 11 insertions, 25 deletions
diff --git a/src/zencore/include/zencore/logging.h b/src/zencore/include/zencore/logging.h index 6d44e31df..bffbe84b4 100644 --- a/src/zencore/include/zencore/logging.h +++ b/src/zencore/include/zencore/logging.h @@ -26,6 +26,7 @@ namespace zen::logging { void InitializeLogging(); void ShutdownLogging(); bool EnableVTMode(); +void FlushLogging(); LoggerRef Default(); void SetDefault(std::string_view NewDefaultLoggerId); diff --git a/src/zencore/include/zencore/zencore.h b/src/zencore/include/zencore/zencore.h index cd1a34c7b..d21c0e7e2 100644 --- a/src/zencore/include/zencore/zencore.h +++ b/src/zencore/include/zencore/zencore.h @@ -47,40 +47,25 @@ public: struct CallstackFrames* _Callstack = nullptr; }; +struct CallstackFrames; + struct AssertImpl { - ZEN_FORCENOINLINE ZEN_DEBUG_SECTION AssertImpl() : PrevAssertImpl(CurrentAssertImpl) { CurrentAssertImpl = this; } - virtual ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ~AssertImpl() { CurrentAssertImpl = PrevAssertImpl; } + ZEN_FORCENOINLINE ZEN_DEBUG_SECTION AssertImpl(); + virtual ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ~AssertImpl(); static void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ExecAssert - [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg) - { - AssertImpl* AssertImpl = CurrentAssertImpl; - while (AssertImpl) - { - AssertImpl->OnAssert(Filename, LineNumber, FunctionName, Msg); - AssertImpl = AssertImpl->PrevAssertImpl; - } - ThrowAssertException(Filename, LineNumber, FunctionName, Msg); - } - - virtual void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION OnAssert(const char* Filename, - int LineNumber, - const char* FunctionName, - const char* Msg) - { - ZEN_UNUSED(Filename); - ZEN_UNUSED(LineNumber); - ZEN_UNUSED(FunctionName); - ZEN_UNUSED(Msg); - } + [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg); + + virtual void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION + OnAssert(const char* Filename, int LineNumber, const char* FunctionName, const char* Msg, CallstackFrames* Callstack); protected: static void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ThrowAssertException - [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg); + [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg, CallstackFrames* Callstack); static AssertImpl* CurrentAssertImpl; static AssertImpl DefaultAssertImpl; - AssertImpl* PrevAssertImpl = nullptr; + AssertImpl* NextAssertImpl = nullptr; }; } // namespace zen |