mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-15 07:32:52 +00:00
This implements bits and pieces to get the debugging functionality to build. No testing has been done to check whether it actually works because GCC doesn't currently work.
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Vector.h>
|
|
#include <LibGUI/ListView.h>
|
|
#include <LibGUI/Model.h>
|
|
#include <sys/arch/i386/regs.h>
|
|
|
|
namespace Debug {
|
|
|
|
class DebugSession;
|
|
|
|
}
|
|
|
|
namespace HackStudio {
|
|
|
|
class BacktraceModel final : public GUI::Model {
|
|
public:
|
|
static NonnullRefPtr<BacktraceModel> create(const Debug::DebugSession&, const PtraceRegisters& regs);
|
|
|
|
virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return m_frames.size(); }
|
|
virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return 1; }
|
|
|
|
virtual String column_name(int) const override
|
|
{
|
|
return "";
|
|
}
|
|
|
|
virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
|
|
|
|
virtual void update() override { }
|
|
virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex&) const override;
|
|
|
|
struct FrameInfo {
|
|
String function_name;
|
|
FlatPtr instruction_address;
|
|
FlatPtr frame_base;
|
|
};
|
|
|
|
const Vector<FrameInfo>& frames() const { return m_frames; }
|
|
|
|
private:
|
|
explicit BacktraceModel(Vector<FrameInfo>&& frames)
|
|
: m_frames(move(frames))
|
|
{
|
|
}
|
|
|
|
static Vector<FrameInfo> create_backtrace(const Debug::DebugSession&, const PtraceRegisters&);
|
|
|
|
Vector<FrameInfo> m_frames;
|
|
};
|
|
|
|
}
|