mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:57:35 +00:00
CrashDaemon+CrashReporter: Streamline crash reporting a little bit
Before this patch, this is what would happen after something crashed: 1. CrashDaemon finds a new coredump in /tmp 2. CrashDaemon compresses the new coredump (gzip) 3. CrashDaemon parses the uncompressed coredump and prints a backtrace 4. CrashDaemon launches CrashReporter 5. CrashReporter parses the uncompressed coredump (again) 6. CrashReporter unlinks the uncompressed coredump 7. CrashReporter displays a GUI This was taking quite a long time when dealing with large programs crashing (like Browser's WebContent processes.) The new flow: 1. CrashDaemon finds a new coredump in /tmp 2. CrashDaemon mmap()'s the (uncompressed) coredump 3. CrashDaemon launches CrashReporter 4. CrashDaemon goes to sleep for 3 seconds (hack alert!) 5. CrashReporter parses the (uncompressed) coredump 6. CrashReporter unlinks the (uncompressed) coredump 7. CrashReporter displays a GUI 8. CrashDaemon wakes up (after step 4) 9. CrashDaemon compresses the coredump (gzip) TL;DR: we no longer parse the coredumps twice, and we also prioritize launching the CrashReporter GUI immediately when a new coredump shows up, instead of compressing and parsing it in CrashDaemon first. The net effect of this is that you get a backtrace on screen much sooner. That's pretty nice. :^)
This commit is contained in:
parent
38b0200151
commit
4f224b15ed
2 changed files with 28 additions and 32 deletions
|
@ -38,9 +38,12 @@ struct TitleAndText {
|
|||
|
||||
static TitleAndText build_backtrace(Coredump::Reader const& coredump, ELF::Core::ThreadInfo const& thread_info, size_t thread_index)
|
||||
{
|
||||
auto timer = Core::ElapsedTimer::start_new();
|
||||
Coredump::Backtrace backtrace(coredump, thread_info);
|
||||
auto metadata = coredump.metadata();
|
||||
|
||||
dbgln("Generating backtrace took {} ms", timer.elapsed());
|
||||
|
||||
StringBuilder builder;
|
||||
|
||||
auto prepend_metadata = [&](auto& key, StringView fmt) {
|
||||
|
@ -73,6 +76,11 @@ static TitleAndText build_backtrace(Coredump::Reader const& coredump, ELF::Core:
|
|||
builder.append(entry.to_string());
|
||||
}
|
||||
|
||||
dbgln("--- Backtrace for thread #{} (TID {}) ---", thread_index, thread_info.tid);
|
||||
for (auto& entry : backtrace.entries()) {
|
||||
dbgln("{}", entry.to_string(true));
|
||||
}
|
||||
|
||||
return {
|
||||
String::formatted("Thread #{} (TID {})", thread_index, thread_info.tid),
|
||||
builder.build()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue