This commit is contained in:
T0b1
2023-06-15 02:25:57 +02:00
parent b393f3dd28
commit 9ab08de243
15 changed files with 1294 additions and 166 deletions

View File

@@ -7,6 +7,7 @@
#include <string>
#include <thread>
#include <mutex>
#include <utility>
#include "util/dag.h"
@@ -47,6 +48,23 @@ namespace dbgui::backend
lldb::break_id_t lldb_id;
};
struct CachedDataRes
{
struct DisasmInfo
{
uint64_t range_start, range_end;
std::vector<uint8_t> bytes;
};
data::result::Node node;
bool child_node;
uint16_t parent_node;
uint16_t parent_member_id;
size_t src_id; // invalid = size_t::MAX
// std::variant<std::monostate, DisasmInfo> extra_info;
};
// TODO: source_init_file: false
LLDBBackend(std::string filename);
virtual ~LLDBBackend();
@@ -60,7 +78,7 @@ namespace dbgui::backend
void cont() override;
void pause() override;
void add_data_node(const data::DataNode &) override;
void add_data_node(const data::source::Node &) override;
void remove_data_node(uint64_t id) override;
void add_breakpoint(uint64_t addr, size_t id) override;
@@ -79,11 +97,14 @@ namespace dbgui::backend
void prepare_proc_info(BackToFront::InitialProcessInfo &,
std::vector<BackToFront::RegsChanged> &);
void dump_threads();
void dump_variables();
void check_reg_changes();
void check_thread_changes();
void check_frame_changes();
void check_data_changes();
data::DataResult calc_data_res(const data::DataNode &);
std::optional<std::pair<uint16_t, size_t>>
calc_data_res(const data::source::Node &,
std::vector<data::result::Node> &data_res);
std::string _filename;
lldb::SBDebugger _instance;
@@ -102,11 +123,16 @@ namespace dbgui::backend
uint16_t _selected_frame = 0;
uint16_t _selected_thread = 0;
util::DAG _data_dag = {};
std::vector<data::DataNode> _data_nodes = {};
std::vector<size_t> _dag_linear = {};
bool _dag_linear_valid = false;
std::vector<data::DataResult> _cached_data_results = {};
util::DAG _data_dag = {};
std::vector<data::source::Node> _data_nodes = {};
std::vector<size_t> _dag_linear = {};
bool _dag_linear_valid = false;
// util::DAG _data_res_dag = {};
std::vector<std::optional<CachedDataRes>> _data_res = {};
std::vector<std::pair<lldb::SBValue, bool>> _locals = {};
std::optional<lldb::SBFrame> _last_frame = {};
// std::unordered_map<size_t, uint16_t> _src_id_to_data_idx = {};
// std::vector<data::DataResult> _cached_data_results = {};
std::vector<Breakpoint> _breakpoints = {};
};