BacktraceModel.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Vector.h>
  8. #include <LibGUI/ListView.h>
  9. #include <LibGUI/Model.h>
  10. #include <sys/arch/i386/regs.h>
  11. namespace Debug {
  12. class DebugSession;
  13. }
  14. namespace HackStudio {
  15. class BacktraceModel final : public GUI::Model {
  16. public:
  17. static NonnullRefPtr<BacktraceModel> create(const Debug::DebugSession&, const PtraceRegisters& regs);
  18. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return m_frames.size(); }
  19. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return 1; }
  20. virtual String column_name(int) const override
  21. {
  22. return "";
  23. }
  24. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  25. virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex&) const override;
  26. struct FrameInfo {
  27. String function_name;
  28. FlatPtr instruction_address;
  29. FlatPtr frame_base;
  30. };
  31. const Vector<FrameInfo>& frames() const { return m_frames; }
  32. private:
  33. explicit BacktraceModel(Vector<FrameInfo>&& frames)
  34. : m_frames(move(frames))
  35. {
  36. }
  37. static Vector<FrameInfo> create_backtrace(const Debug::DebugSession&, const PtraceRegisters&);
  38. Vector<FrameInfo> m_frames;
  39. };
  40. }