BacktraceModel.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 <LibDebug/ProcessInspector.h>
  9. #include <LibGUI/ListView.h>
  10. #include <LibGUI/Model.h>
  11. #include <sys/arch/i386/regs.h>
  12. namespace Debug {
  13. class DebugSession;
  14. }
  15. namespace HackStudio {
  16. class BacktraceModel final : public GUI::Model {
  17. public:
  18. static NonnullRefPtr<BacktraceModel> create(Debug::ProcessInspector const&, PtraceRegisters const& regs);
  19. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return m_frames.size(); }
  20. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return 1; }
  21. virtual String column_name(int) const override
  22. {
  23. return "";
  24. }
  25. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  26. virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex&) const override;
  27. struct FrameInfo {
  28. String function_name;
  29. FlatPtr instruction_address;
  30. FlatPtr frame_base;
  31. };
  32. const Vector<FrameInfo>& frames() const { return m_frames; }
  33. private:
  34. explicit BacktraceModel(Vector<FrameInfo>&& frames)
  35. : m_frames(move(frames))
  36. {
  37. }
  38. static Vector<FrameInfo> create_backtrace(Debug::ProcessInspector const&, PtraceRegisters const&);
  39. Vector<FrameInfo> m_frames;
  40. };
  41. }