mirror of
https://github.com/RGBCube/serenity
synced 2025-05-15 05:35:02 +00:00

This changes the previously static s_debug_info_cache to a member variable. This is required so the cache is not kept alive if the Backtrace object is destroyed. Previously, the cache object would keep alive MappedFile objects and other data, resulting in CrashReporter and CrashDaemon using more than 100 MB of memory even after the Backtrace objects have been destroyed (and the data is thus no longer needed). This was especially the case when handling crashes from Browser (due to libweb.so and libjs.so). Due to this change, object_info_for_region has been promoted to a instance method. It has also been cleaned up somewhat.
53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) 2020, Linus Groh <linusg@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
#include <LibCoreDump/Reader.h>
|
|
#include <LibDebug/DebugInfo.h>
|
|
#include <LibELF/CoreDump.h>
|
|
|
|
namespace CoreDump {
|
|
|
|
struct ELFObjectInfo {
|
|
ELFObjectInfo(NonnullRefPtr<MappedFile> file, NonnullOwnPtr<Debug::DebugInfo>&& debug_info)
|
|
: file(move(file))
|
|
, debug_info(move(debug_info))
|
|
{
|
|
}
|
|
|
|
NonnullRefPtr<MappedFile> file;
|
|
NonnullOwnPtr<Debug::DebugInfo> debug_info;
|
|
};
|
|
|
|
class Backtrace {
|
|
public:
|
|
struct Entry {
|
|
FlatPtr eip;
|
|
String object_name;
|
|
String function_name;
|
|
Debug::DebugInfo::SourcePositionWithInlines source_position_with_inlines;
|
|
|
|
String to_string(bool color = false) const;
|
|
};
|
|
|
|
Backtrace(const Reader&, const ELF::Core::ThreadInfo&);
|
|
~Backtrace();
|
|
|
|
const ELF::Core::ThreadInfo thread_info() const { return m_thread_info; }
|
|
const Vector<Entry> entries() const { return m_entries; }
|
|
|
|
private:
|
|
void add_entry(const Reader&, FlatPtr eip);
|
|
ELFObjectInfo const* object_info_for_region(ELF::Core::MemoryRegionInfo const&);
|
|
|
|
ELF::Core::ThreadInfo m_thread_info;
|
|
Vector<Entry> m_entries;
|
|
HashMap<String, NonnullOwnPtr<ELFObjectInfo>> m_debug_info_cache;
|
|
};
|
|
|
|
}
|