diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 4b537f20a8..b6c3a7df19 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -18,6 +18,7 @@ #include #include #include +#include // Remove this once SMP is stable and can be enabled by default #define SCHEDULE_ON_ALL_PROCESSORS 0 @@ -595,8 +596,14 @@ void dump_thread_list(bool with_stack_traces) thread.times_scheduled()); break; } - if (with_stack_traces) - dbgln("{}", thread.backtrace()); + if (with_stack_traces) { + auto trace_or_error = thread.backtrace(); + if (!trace_or_error.is_error()) { + auto trace = trace_or_error.release_value(); + dbgln("Backtrace:"); + kernelputstr(trace->characters(), trace->length()); + } + } return IterationDecision::Continue; }); } diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index d218c6b697..220b7bf966 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include namespace Kernel { @@ -501,8 +502,14 @@ void Thread::finalize() m_join_blocker_set.thread_finalizing(); } - if (m_dump_backtrace_on_finalization) - dbgln("{}", backtrace()); + if (m_dump_backtrace_on_finalization) { + auto trace_or_error = backtrace(); + if (!trace_or_error.is_error()) { + auto trace = trace_or_error.release_value(); + dbgln("Backtrace:"); + kernelputstr(trace->characters(), trace->length()); + } + } drop_thread_count(false); }