fix bug with initial state change
This commit is contained in:
@@ -141,6 +141,14 @@ void LLDBBackend::handle_state_change(lldb::StateType state)
|
||||
using namespace lldb;
|
||||
if (_first_run)
|
||||
{
|
||||
spdlog::trace("Got initial state change: {}", static_cast<uint32_t>(state));
|
||||
|
||||
if (state != lldb::StateType::eStateStopped) {
|
||||
// TODO: handle other stopped states, e.g. crashed
|
||||
spdlog::trace("Not handling initial state {}", static_cast<uint32_t>(state));
|
||||
return;
|
||||
}
|
||||
|
||||
_first_run = false;
|
||||
// TODO: do initialization
|
||||
// TODO: we should only do this when the process was stopped, no?
|
||||
@@ -278,28 +286,28 @@ void LLDBBackend::prepare_proc_info(
|
||||
}
|
||||
|
||||
auto frame = _process->GetThreadAtIndex(0).GetFrameAtIndex(0);
|
||||
const auto regs = frame.GetRegisters();
|
||||
/*const auto len = regs.GetSize();
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
auto reg_or_set = regs.GetValueAtIndex(i);
|
||||
if (reg_or_set.GetValueType() == eValueTypeRegister) {
|
||||
printf("Got register %s (%s) with value: %lX\n", reg_or_set.GetName(), reg_or_set.GetTypeName(), reg_or_set.GetValueAsUnsigned(0));
|
||||
info.reg_names.emplace_back(reg_or_set.GetName());
|
||||
continue;
|
||||
}
|
||||
printf("Got register set %s\n", reg_or_set.GetName());
|
||||
const auto is_gp_set = std::string_view{reg_or_set.GetName()} == "General Purpose Registers";
|
||||
for (uint32_t child_idx = 0; child_idx < reg_or_set.GetNumChildren(); ++child_idx) {
|
||||
auto reg = reg_or_set.GetChildAtIndex(child_idx);
|
||||
printf("Got register %s (%s) with value: %lX\n", reg.GetName(), reg.GetTypeName(), reg.GetValueAsUnsigned(0));
|
||||
if (is_gp_set && info.arch == Arch::x86_64 && reg.GetByteSize() < 8) {
|
||||
// skip non-full regs here
|
||||
printf(" -> Skipped\n");
|
||||
continue;
|
||||
}
|
||||
info.reg_names.emplace_back(reg.GetName());
|
||||
}
|
||||
}*/
|
||||
/*const auto regs = frame.GetRegisters();
|
||||
const auto len = regs.GetSize();
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
auto reg_or_set = regs.GetValueAtIndex(i);
|
||||
if (reg_or_set.GetValueType() == eValueTypeRegister) {
|
||||
spdlog::trace("Got register {} ({}) with value: {:X}", reg_or_set.GetName(), reg_or_set.GetTypeName(), reg_or_set.GetValueAsUnsigned(0));
|
||||
//info.reg_names.emplace_back(reg_or_set.GetName());
|
||||
continue;
|
||||
}
|
||||
spdlog::trace("Got register set {}\n", reg_or_set.GetName());
|
||||
const auto is_gp_set = std::string_view{reg_or_set.GetName()} == "General Purpose Registers";
|
||||
for (uint32_t child_idx = 0; child_idx < reg_or_set.GetNumChildren(); ++child_idx) {
|
||||
auto reg = reg_or_set.GetChildAtIndex(child_idx);
|
||||
spdlog::trace("Got register {} ({}) with value: {:X}", reg.GetName(), reg.GetTypeName(), reg.GetValueAsUnsigned(0));
|
||||
if (is_gp_set && info.arch == Arch::x86_64 && reg.GetByteSize() < 8) {
|
||||
// skip non-full regs here
|
||||
spdlog::trace(" -> Skipped");
|
||||
continue;
|
||||
}
|
||||
//info.reg_names.emplace_back(reg.GetName());
|
||||
}
|
||||
}*/
|
||||
|
||||
if (info.arch == Arch::x86_64)
|
||||
{
|
||||
@@ -640,8 +648,8 @@ dbgui::data::type_info::TypeID
|
||||
auto base_id = parse_type_inner(out_vec, base_type);
|
||||
out_vec.push_back(type_info::TypeInfo{
|
||||
.type = type_info::Type::_enum,
|
||||
.byte_size = type_copy.GetByteSize(),
|
||||
.enum_base = base_id,
|
||||
.byte_size = type_copy.GetByteSize(),
|
||||
.display_name = std::string{display_name},
|
||||
.internal_name = std::string{internal_name},
|
||||
.member_types = std::vector<type_info::MemberInfo>{}});
|
||||
@@ -2659,8 +2667,8 @@ dbgui::data::type_info::TypeID
|
||||
auto base_id = this->build_type_from_lldb_type(base_type);
|
||||
_types.emplace_back(std::make_pair(
|
||||
lldb_type, TypeInfo{.type = Type::_enum,
|
||||
.byte_size = lldb_type.GetByteSize(),
|
||||
.enum_base = base_id,
|
||||
.byte_size = lldb_type.GetByteSize(),
|
||||
.display_name = std::string{display_name},
|
||||
.internal_name = std::string{internal_name},
|
||||
.member_types = std::vector<MemberInfo>{}}));
|
||||
|
||||
Reference in New Issue
Block a user