lldb::ValueObjectSP GetChildAtIndex(size_t idx) override { if (!m_block_struct_type.IsValid()) { return lldb::ValueObjectSP(); } if (idx >= CalculateNumChildren()) { return lldb::ValueObjectSP(); } const bool thread_and_frame_only_if_stopped = true; ExecutionContext exe_ctx = m_backend.GetExecutionContextRef().Lock( thread_and_frame_only_if_stopped); const bool transparent_pointers = false; const bool omit_empty_base_classes = false; const bool ignore_array_bounds = false; ValueObject *value_object = nullptr; std::string child_name; uint32_t child_byte_size = 0; int32_t child_byte_offset = 0; uint32_t child_bitfield_bit_size = 0; uint32_t child_bitfield_bit_offset = 0; bool child_is_base_class = false; bool child_is_deref_of_parent = false; uint64_t language_flags = 0; const CompilerType child_type = m_block_struct_type.GetChildCompilerTypeAtIndex( &exe_ctx, idx, transparent_pointers, omit_empty_base_classes, ignore_array_bounds, child_name, child_byte_size, child_byte_offset, child_bitfield_bit_size, child_bitfield_bit_offset, child_is_base_class, child_is_deref_of_parent, value_object, language_flags); ValueObjectSP struct_pointer_sp = m_backend.Cast(m_block_struct_type.GetPointerType()); if (!struct_pointer_sp) { return lldb::ValueObjectSP(); } Error err; ValueObjectSP struct_sp = struct_pointer_sp->Dereference(err); if (!struct_sp || !err.Success()) { return lldb::ValueObjectSP(); } ValueObjectSP child_sp(struct_sp->GetSyntheticChildAtOffset( child_byte_offset, child_type, true, ConstString(child_name.c_str(), child_name.size()))); return child_sp; }
Node::NodeSP Node::addChildNode(Node* child) { if(child != nullptr) { QString key(child->getName()); NodeSP child_sp(child); mChildren.insert(std::make_pair(key, child_sp)); child_sp->setParent(this); child_sp->initialize(); if(!mIsEnabled) child->disable(); return findChildNode(key, false); } else { return nullptr; } }
virtual lldb::ValueObjectSP GetChildAtIndex (size_t idx) { if (idx >= CalculateNumChildren()) return lldb::ValueObjectSP(); auto offset = idx * m_child_type.GetByteSize(nullptr); ValueObjectSP child_sp(m_backend.GetSyntheticChildAtOffset(offset, m_child_type, true)); if (!child_sp) return child_sp; StreamString idx_name; idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx); child_sp->SetName( ConstString( idx_name.GetData() ) ); child_sp->SetFormat(m_item_format); return child_sp; }