aboutsummaryrefslogtreecommitdiff
path: root/src/zencore
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-08-14 09:23:19 +0200
committerGitHub Enterprise <[email protected]>2024-08-14 09:23:19 +0200
commit501d5e3b0be37ebceda96240af1e4d8df927d68f (patch)
tree1279228466433e992ec1dd2635c317d1ce78dcc3 /src/zencore
parentdon't try to memcache the empty buffer if invalid format (#110) (diff)
downloadzen-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.cpp10
-rw-r--r--src/zencore/include/zencore/callstack.h4
-rw-r--r--src/zencore/zencore.cpp4
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