Serenity Operating System
at master 59 lines 1.5 kB view raw
1/* 2 * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Vector.h> 10#include <LibDebug/ProcessInspector.h> 11#include <LibGUI/ListView.h> 12#include <LibGUI/Model.h> 13#include <sys/arch/regs.h> 14 15namespace Debug { 16 17class DebugSession; 18 19} 20 21namespace HackStudio { 22 23class BacktraceModel final : public GUI::Model { 24public: 25 static NonnullRefPtr<BacktraceModel> create(Debug::ProcessInspector const&, PtraceRegisters const& regs); 26 27 virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return m_frames.size(); } 28 virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return 1; } 29 30 virtual DeprecatedString column_name(int) const override 31 { 32 return ""; 33 } 34 35 virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override; 36 37 virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex&) const override; 38 39 struct FrameInfo { 40 DeprecatedString function_name; 41 FlatPtr instruction_address { 0 }; 42 FlatPtr frame_base { 0 }; 43 Optional<Debug::DebugInfo::SourcePosition> m_source_position; 44 }; 45 46 Vector<FrameInfo> const& frames() const { return m_frames; } 47 48private: 49 explicit BacktraceModel(Vector<FrameInfo>&& frames) 50 : m_frames(move(frames)) 51 { 52 } 53 54 static Vector<FrameInfo> create_backtrace(Debug::ProcessInspector const&, PtraceRegisters const&); 55 56 Vector<FrameInfo> m_frames; 57}; 58 59}