diff options
| author | Dan Engelbrecht <[email protected]> | 2024-08-14 09:23:19 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-08-14 09:23:19 +0200 |
| commit | 501d5e3b0be37ebceda96240af1e4d8df927d68f (patch) | |
| tree | 1279228466433e992ec1dd2635c317d1ce78dcc3 /src/zencore | |
| parent | don't try to memcache the empty buffer if invalid format (#110) (diff) | |
| download | zen-501d5e3b0be37ebceda96240af1e4d8df927d68f.tar.xz zen-501d5e3b0be37ebceda96240af1e4d8df927d68f.zip | |
improve logging on main failure (#111)
* add support for indenting callstack output
* Explicitly catch option-parse error and reduce log spam on bad parameters
* add command line to sentry error reports
* log command line at startup
Diffstat (limited to 'src/zencore')
| -rw-r--r-- | src/zencore/callstack.cpp | 10 | ||||
| -rw-r--r-- | src/zencore/include/zencore/callstack.h | 4 | ||||
| -rw-r--r-- | src/zencore/zencore.cpp | 4 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/zencore/callstack.cpp b/src/zencore/callstack.cpp index 905ab3d9e..d16605fb9 100644 --- a/src/zencore/callstack.cpp +++ b/src/zencore/callstack.cpp @@ -172,7 +172,7 @@ GetFrameSymbols(uint32_t FrameCount, void** Frames) } void -FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB) +FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB, std::string_view Prefix) { bool First = true; for (const std::string& Symbol : GetFrameSymbols(Callstack)) @@ -185,15 +185,19 @@ FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB) { First = false; } + if (!Prefix.empty()) + { + SB.Append(Prefix); + } SB.Append(Symbol); } } std::string -CallstackToString(const CallstackFrames* Callstack) +CallstackToString(const CallstackFrames* Callstack, std::string_view Prefix) { StringBuilder<2048> SB; - FormatCallstack(Callstack, SB); + FormatCallstack(Callstack, SB, Prefix); return SB.ToString(); } diff --git a/src/zencore/include/zencore/callstack.h b/src/zencore/include/zencore/callstack.h index 02ba8b3c3..ef4ba0e91 100644 --- a/src/zencore/include/zencore/callstack.h +++ b/src/zencore/include/zencore/callstack.h @@ -29,8 +29,8 @@ GetFrameSymbols(const CallstackFrames* Callstack) return GetFrameSymbols(Callstack ? Callstack->FrameCount : 0, Callstack ? Callstack->Frames : nullptr); } -void FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB); -std::string CallstackToString(const CallstackFrames* Callstack); +void FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB, std::string_view Prefix); +std::string CallstackToString(const CallstackFrames* Callstack, std::string_view Prefix = {}); void callstack_forcelink(); // internal diff --git a/src/zencore/zencore.cpp b/src/zencore/zencore.cpp index 9c48b355b..6a963110b 100644 --- a/src/zencore/zencore.cpp +++ b/src/zencore/zencore.cpp @@ -82,7 +82,7 @@ AssertException::FullDescription() const noexcept { if (_Callstack) { - return fmt::format("'{}'\n{}", what(), CallstackToString(_Callstack)); + return fmt::format("'{}'\n{}", what(), CallstackToString(_Callstack, " ")); } return what(); } @@ -131,7 +131,7 @@ AssertImpl::OnAssert(const char* Filename, int LineNumber, const char* FunctionN fmt::basic_memory_buffer<char, 2048> Message; auto Appender = fmt::appender(Message); - fmt::format_to(Appender, "{}({}): ZEN_ASSERT({})\n{}", Filename, LineNumber, Msg, CallstackToString(Callstack)); + fmt::format_to(Appender, "{}({}): ZEN_ASSERT({})\n{}", Filename, LineNumber, Msg, CallstackToString(Callstack, " ")); Message.push_back('\0'); // We use direct ZEN_LOG here instead of ZEN_ERROR as we don't care about *this* code location in the log |