lldb::SBValue SBValue::CreateChildAtOffset (const char *name, uint32_t offset, SBType type) { lldb::SBValue sb_value; ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); lldb::ValueObjectSP new_value_sp; if (value_sp) { TypeImplSP type_sp (type.GetSP()); if (type.IsValid()) { sb_value.SetSP(value_sp->GetSyntheticChildAtOffset(offset, type_sp->GetClangASTType(), true),GetPreferDynamicValue(),GetPreferSyntheticValue(), name); } } Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { if (new_value_sp) log->Printf ("SBValue(%p)::CreateChildAtOffset => \"%s\"", value_sp.get(), new_value_sp->GetName().AsCString()); else log->Printf ("SBValue(%p)::CreateChildAtOffset => NULL", value_sp.get()); } return sb_value; }
lldb::SBValue SBValue::Cast (SBType type) { lldb::SBValue sb_value; ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); TypeImplSP type_sp (type.GetSP()); if (value_sp && type_sp) sb_value.SetSP(value_sp->Cast(type_sp->GetClangASTType()),GetPreferDynamicValue(),GetPreferSyntheticValue()); return sb_value; }
lldb::SBValue SBValue::CreateValueFromAddress(const char* name, lldb::addr_t address, SBType sb_type) { lldb::SBValue sb_value; ValueLocker locker; lldb::ValueObjectSP value_sp(GetSP(locker)); lldb::ValueObjectSP new_value_sp; lldb::TypeImplSP type_impl_sp (sb_type.GetSP()); if (value_sp && type_impl_sp) { ClangASTType pointee_ast_type(type_impl_sp->GetClangASTType().GetPointerType ()); if (pointee_ast_type) { lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t))); ExecutionContext exe_ctx (value_sp->GetExecutionContextRef()); ValueObjectSP ptr_result_valobj_sp(ValueObjectConstResult::Create (exe_ctx.GetBestExecutionContextScope(), pointee_ast_type, ConstString(name), buffer, lldb::endian::InlHostByteOrder(), exe_ctx.GetAddressByteSize())); if (ptr_result_valobj_sp) { ptr_result_valobj_sp->GetValue().SetValueType(Value::eValueTypeLoadAddress); Error err; new_value_sp = ptr_result_valobj_sp->Dereference(err); if (new_value_sp) new_value_sp->SetName(ConstString(name)); } sb_value.SetSP(new_value_sp); } } Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { if (new_value_sp) log->Printf ("SBValue(%p)::CreateValueFromAddress => \"%s\"", value_sp.get(), new_value_sp->GetName().AsCString()); else log->Printf ("SBValue(%p)::CreateValueFromAddress => NULL", value_sp.get()); } return sb_value; }