60 const char *name =
nullptr)
61 : m_use_dynamic(use_dynamic), m_use_synthetic(use_synthetic),
64 if ((m_valobj_sp = in_valobj_sp->GetQualifiedRepresentationIfAvailable(
66 if (!m_name.IsEmpty())
67 m_valobj_sp->SetName(m_name);
85 if (m_valobj_sp.get() ==
nullptr)
99 TargetSP target_sp = m_valobj_sp->GetTargetSP();
100 return target_sp && target_sp->IsValid();
107 std::unique_lock<std::recursive_mutex> &lock,
110 error.SetErrorString(
"invalid value object");
114 lldb::ValueObjectSP value_sp = m_valobj_sp;
116 Target *target = value_sp->GetTargetSP().get();
118 return ValueObjectSP();
120 lock = std::unique_lock<std::recursive_mutex>(target->
GetAPIMutex());
122 ProcessSP process_sp(value_sp->GetProcessSP());
123 if (process_sp && !stop_locker.
TryLock(&process_sp->GetRunLock())) {
127 error.SetErrorString(
"process must be stopped.");
128 return ValueObjectSP();
132 ValueObjectSP dynamic_sp = value_sp->GetDynamicValue(m_use_dynamic);
134 value_sp = dynamic_sp;
137 if (m_use_synthetic) {
138 ValueObjectSP synthetic_sp = value_sp->GetSyntheticValue();
140 value_sp = synthetic_sp;
144 error.SetErrorString(
"invalid value object");
145 if (!m_name.IsEmpty())
146 value_sp->SetName(m_name);
152 m_use_dynamic = use_dynamic;
167 return m_valobj_sp->GetTargetSP();
174 return m_valobj_sp->GetProcessSP();
181 return m_valobj_sp->GetThreadSP();
188 return m_valobj_sp->GetFrameSP();
190 return StackFrameSP();
205 return in_value.
GetSP(m_stop_locker, m_lock, m_lock_error);
212 std::unique_lock<std::recursive_mutex>
m_lock;
243 return this->
operator bool();
245 SBValue::operator bool()
const {
251 return m_opaque_sp.get() !=
nullptr && m_opaque_sp->IsValid() &&
252 m_opaque_sp->GetRootSP().get() !=
nullptr;
267 lldb::ValueObjectSP value_sp(GetSP(locker));
269 sb_error.
SetError(value_sp->GetError());
281 lldb::ValueObjectSP value_sp(GetSP(locker));
283 return value_sp->GetID();
290 const char *name =
nullptr;
292 lldb::ValueObjectSP value_sp(GetSP(locker));
294 name = value_sp->GetName().GetCString();
302 const char *name =
nullptr;
304 lldb::ValueObjectSP value_sp(GetSP(locker));
306 name = value_sp->GetQualifiedTypeName().GetCString();
315 const char *name =
nullptr;
317 lldb::ValueObjectSP value_sp(GetSP(locker));
319 name = value_sp->GetDisplayTypeName().GetCString();
331 lldb::ValueObjectSP value_sp(GetSP(locker));
333 result = value_sp->GetByteSize().getValueOr(0);
345 lldb::ValueObjectSP value_sp(GetSP(locker));
347 result = value_sp->IsInScope();
356 const char *cstr =
nullptr;
358 lldb::ValueObjectSP value_sp(GetSP(locker));
360 cstr = value_sp->GetValueAsCString();
371 lldb::ValueObjectSP value_sp(GetSP(locker));
373 result = value_sp->GetValueType();
381 const char *cstr =
nullptr;
383 lldb::ValueObjectSP value_sp(GetSP(locker));
385 cstr = value_sp->GetObjectDescription();
396 lldb::ValueObjectSP value_sp(GetSP(locker));
399 type_sp = std::make_shared<TypeImpl>(value_sp->GetTypeImpl());
400 sb_type.
SetSP(type_sp);
411 lldb::ValueObjectSP value_sp(GetSP(locker));
413 if (value_sp->UpdateValueIfNeeded(
false))
414 result = value_sp->GetValueDidChange();
423 const char *cstr =
nullptr;
425 lldb::ValueObjectSP value_sp(GetSP(locker));
427 cstr = value_sp->GetSummaryAsCString();
438 lldb::ValueObjectSP value_sp(GetSP(locker));
441 if (value_sp->GetSummaryAsCString(buffer, options.
ref()) && !buffer.empty())
442 stream.
Printf(
"%s", buffer.c_str());
444 const char *cstr = stream.
GetData();
451 const char *cstr =
nullptr;
453 lldb::ValueObjectSP value_sp(GetSP(locker));
455 cstr = value_sp->GetLocationAsCString();
465 return SetValueFromCString(value_str, dummy);
471 bool success =
false;
473 lldb::ValueObjectSP value_sp(GetSP(locker));
475 success = value_sp->SetValueFromCString(value_str,
error.ref());
477 error.SetErrorStringWithFormat(
"Could not get value: %s",
488 lldb::ValueObjectSP value_sp(GetSP(locker));
490 if (value_sp->UpdateValueIfNeeded(
true)) {
491 lldb::TypeFormatImplSP format_sp = value_sp->GetValueFormat();
493 format.
SetSP(format_sp);
504 lldb::ValueObjectSP value_sp(GetSP(locker));
506 if (value_sp->UpdateValueIfNeeded(
true)) {
507 lldb::TypeSummaryImplSP summary_sp = value_sp->GetSummaryFormat();
509 summary.
SetSP(summary_sp);
520 lldb::ValueObjectSP value_sp(GetSP(locker));
522 if (value_sp->UpdateValueIfNeeded(
true)) {
523 lldb::SyntheticChildrenSP synthetic_sp = value_sp->GetSyntheticChildren();
525 if (synthetic_sp && !synthetic_sp->IsScripted()) {
526 TypeFilterImplSP filter_sp =
527 std::static_pointer_cast<TypeFilterImpl>(synthetic_sp);
528 filter.
SetSP(filter_sp);
540 lldb::ValueObjectSP value_sp(GetSP(locker));
542 if (value_sp->UpdateValueIfNeeded(
true)) {
543 lldb::SyntheticChildrenSP children_sp = value_sp->GetSyntheticChildren();
545 if (children_sp && children_sp->IsScripted()) {
546 ScriptedSyntheticChildrenSP synth_sp =
547 std::static_pointer_cast<ScriptedSyntheticChildren>(children_sp);
548 synthetic.
SetSP(synth_sp);
561 lldb::ValueObjectSP value_sp(GetSP(locker));
562 lldb::ValueObjectSP new_value_sp;
564 TypeImplSP type_sp(type.
GetSP());
566 sb_value.
SetSP(value_sp->GetSyntheticChildAtOffset(
567 offset, type_sp->GetCompilerType(
false),
true),
568 GetPreferDynamicValue(), GetPreferSyntheticValue(), name);
579 lldb::ValueObjectSP value_sp(GetSP(locker));
580 TypeImplSP type_sp(type.
GetSP());
581 if (value_sp && type_sp)
582 sb_value.
SetSP(value_sp->Cast(type_sp->GetCompilerType(
false)),
583 GetPreferDynamicValue(), GetPreferSyntheticValue());
588 const char *expression) {
593 return CreateValueFromExpression(name, expression, options);
597 const char *expression,
603 lldb::ValueObjectSP value_sp(GetSP(locker));
604 lldb::ValueObjectSP new_value_sp;
607 new_value_sp = ValueObject::CreateValueObjectFromExpression(
608 name, expression, exe_ctx, options.
ref());
612 sb_value.
SetSP(new_value_sp);
623 lldb::ValueObjectSP value_sp(GetSP(locker));
624 lldb::ValueObjectSP new_value_sp;
625 lldb::TypeImplSP type_impl_sp(sb_type.
GetSP());
626 if (value_sp && type_impl_sp) {
627 CompilerType ast_type(type_impl_sp->GetCompilerType(
true));
629 new_value_sp = ValueObject::CreateValueObjectFromAddress(name, address,
632 sb_value.
SetSP(new_value_sp);
641 lldb::ValueObjectSP new_value_sp;
643 lldb::ValueObjectSP value_sp(GetSP(locker));
644 lldb::TypeImplSP type_impl_sp(sb_type.
GetSP());
645 if (value_sp && type_impl_sp) {
647 new_value_sp = ValueObject::CreateValueObjectFromData(
648 name, **data, exe_ctx, type_impl_sp->GetCompilerType(
true));
651 sb_value.
SetSP(new_value_sp);
658 const bool can_create_synthetic =
false;
662 target_sp = m_opaque_sp->GetTargetSP();
665 use_dynamic = target_sp->GetPreferDynamicValue();
667 return GetChildAtIndex(idx, use_dynamic, can_create_synthetic);
672 bool can_create_synthetic) {
675 lldb::ValueObjectSP child_sp;
678 lldb::ValueObjectSP value_sp(GetSP(locker));
680 const bool can_create =
true;
681 child_sp = value_sp->GetChildAtIndex(idx, can_create);
682 if (can_create_synthetic && !child_sp) {
683 child_sp = value_sp->GetSyntheticArrayMember(idx, can_create);
688 sb_value.
SetSP(child_sp, use_dynamic, GetPreferSyntheticValue());
698 lldb::ValueObjectSP value_sp(GetSP(locker));
700 idx = value_sp->GetIndexOfChildWithName(
ConstString(name));
711 target_sp = m_opaque_sp->GetTargetSP();
714 use_dynamic_value = target_sp->GetPreferDynamicValue();
715 return GetChildMemberWithName(name, use_dynamic_value);
723 lldb::ValueObjectSP child_sp;
727 lldb::ValueObjectSP value_sp(GetSP(locker));
729 child_sp = value_sp->GetChildMemberWithName(str_name,
true);
733 sb_value.
SetSP(child_sp, use_dynamic_value, GetPreferSyntheticValue());
744 m_opaque_sp->GetUseSynthetic()));
745 value_sb.
SetSP(proxy_sp);
757 m_opaque_sp->GetUseSynthetic()));
758 value_sb.
SetSP(proxy_sp);
769 m_opaque_sp->GetUseDynamic(),
false));
770 value_sb.
SetSP(proxy_sp);
780 return m_opaque_sp->GetUseDynamic();
787 return m_opaque_sp->SetUseDynamic(use_dynamic);
795 return m_opaque_sp->GetUseSynthetic();
802 return m_opaque_sp->SetUseSynthetic(use_synthetic);
809 lldb::ValueObjectSP value_sp(GetSP(locker));
811 return value_sp->IsDynamic();
819 lldb::ValueObjectSP value_sp(GetSP(locker));
821 return value_sp->IsSynthetic();
829 lldb::ValueObjectSP value_sp(GetSP(locker));
831 return value_sp->IsSyntheticChildrenGenerated();
839 lldb::ValueObjectSP value_sp(GetSP(locker));
841 return value_sp->SetSyntheticChildrenGenerated(is);
847 lldb::ValueObjectSP child_sp;
849 lldb::ValueObjectSP value_sp(GetSP(locker));
852 child_sp = value_sp->GetValueForExpressionPath(expr_path);
856 sb_value.
SetSP(child_sp, GetPreferDynamicValue(), GetPreferSyntheticValue());
866 lldb::ValueObjectSP value_sp(GetSP(locker));
869 uint64_t ret_val = fail_value;
870 ret_val = value_sp->GetValueAsSigned(fail_value, &success);
872 error.SetErrorString(
"could not resolve value");
875 error.SetErrorStringWithFormat(
"could not get SBValue: %s",
886 lldb::ValueObjectSP value_sp(GetSP(locker));
889 uint64_t ret_val = fail_value;
890 ret_val = value_sp->GetValueAsUnsigned(fail_value, &success);
892 error.SetErrorString(
"could not resolve value");
895 error.SetErrorStringWithFormat(
"could not get SBValue: %s",
905 lldb::ValueObjectSP value_sp(GetSP(locker));
907 return value_sp->GetValueAsSigned(fail_value);
916 lldb::ValueObjectSP value_sp(GetSP(locker));
918 return value_sp->GetValueAsUnsigned(fail_value);
926 bool has_children =
false;
928 lldb::ValueObjectSP value_sp(GetSP(locker));
930 has_children = value_sp->MightHaveChildren();
938 bool is_support =
false;
940 lldb::ValueObjectSP value_sp(GetSP(locker));
942 is_support = value_sp->IsRuntimeSupportValue();
959 lldb::ValueObjectSP value_sp(GetSP(locker));
961 num_children = value_sp->GetNumChildren(max);
971 lldb::ValueObjectSP value_sp(GetSP(locker));
984 return GetType().IsPointerType();
991 lldb::ValueObjectSP value_sp(GetSP(locker));
993 return value_sp->GetCompilerType().GetOpaqueQualType();
1003 target_sp = m_opaque_sp->GetTargetSP();
1004 sb_target.
SetSP(target_sp);
1014 ProcessSP process_sp;
1016 process_sp = m_opaque_sp->GetProcessSP();
1017 sb_process.
SetSP(process_sp);
1029 thread_sp = m_opaque_sp->GetThreadSP();
1040 StackFrameSP frame_sp;
1050 if (!m_opaque_sp || !m_opaque_sp->IsValid()) {
1052 return ValueObjectSP();
1061 return GetSP(locker);
1068 lldb::TargetSP target_sp(
sp->GetTargetSP());
1071 bool use_synthetic =
1072 target_sp->TargetProperties::GetEnableSyntheticValue();
1083 lldb::TargetSP target_sp(
sp->GetTargetSP());
1085 bool use_synthetic =
1086 target_sp->TargetProperties::GetEnableSyntheticValue();
1087 SetSP(
sp, use_dynamic, use_synthetic);
1089 SetSP(
sp, use_dynamic,
true);
1091 SetSP(
sp, use_dynamic,
false);
1096 lldb::TargetSP target_sp(
sp->GetTargetSP());
1099 SetSP(
sp, use_dynamic, use_synthetic);
1122 lldb::ValueObjectSP value_sp(GetSP(locker));
1124 value_sp->GetExpressionPath(description.
ref());
1131 bool qualify_cxx_base_classes) {
1135 lldb::ValueObjectSP value_sp(GetSP(locker));
1137 value_sp->GetExpressionPath(description.
ref());
1147 lldb::ValueObjectSP value_sp(GetSP(locker));
1151 lldb::TargetSP target_sp = value_sp->GetTargetSP();
1160 return EvaluateExpression(expr, options,
nullptr);
1168 return EvaluateExpression(expr, options,
nullptr);
1173 const char *name)
const {
1176 if (!expr || expr[0] ==
'\0') {
1182 lldb::ValueObjectSP value_sp(GetSP(locker));
1187 lldb::TargetSP target_sp = value_sp->GetTargetSP();
1192 std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex());
1200 ValueObjectSP res_val_sp;
1201 target_sp->EvaluateExpression(expr, frame, res_val_sp, options.
ref(),
nullptr,
1218 lldb::ValueObjectSP value_sp(GetSP(locker));
1220 value_sp->Dump(strm);
1231 lldb::ValueObjectSP value_sp(GetSP(locker));
1233 return value_sp->GetFormat();
1241 lldb::ValueObjectSP value_sp(GetSP(locker));
1243 value_sp->SetFormat(format);
1251 lldb::ValueObjectSP value_sp(GetSP(locker));
1254 sb_value.
SetSP(value_sp->AddressOf(
error), GetPreferDynamicValue(),
1255 GetPreferSyntheticValue());
1266 lldb::ValueObjectSP value_sp(GetSP(locker));
1268 TargetSP target_sp(value_sp->GetTargetSP());
1270 const bool scalar_is_load_address =
true;
1272 value = value_sp->GetAddressOf(scalar_is_load_address, &addr_type);
1274 ModuleSP module_sp(value_sp->GetModule());
1279 module_sp->ResolveFileAddress(value, addr);
1296 lldb::ValueObjectSP value_sp(GetSP(locker));
1298 TargetSP target_sp(value_sp->GetTargetSP());
1301 const bool scalar_is_load_address =
true;
1303 value = value_sp->GetAddressOf(scalar_is_load_address, &addr_type);
1305 ModuleSP module_sp(value_sp->GetModule());
1307 module_sp->ResolveFileAddress(value, addr);
1325 lldb::ValueObjectSP value_sp(GetSP(locker));
1327 TargetSP target_sp(value_sp->GetTargetSP());
1330 value_sp->GetPointeeData(*data_sp, item_idx, item_count);
1331 if (data_sp->GetByteSize() > 0)
1344 lldb::ValueObjectSP value_sp(GetSP(locker));
1348 value_sp->GetData(*data_sp,
error);
1349 if (
error.Success())
1360 lldb::ValueObjectSP value_sp(GetSP(locker));
1366 if (!data_extractor) {
1367 error.SetErrorString(
"No data to set");
1372 value_sp->SetData(*data_extractor, set_error);
1375 error.SetErrorStringWithFormat(
"Couldn't set data: %s",
1381 error.SetErrorStringWithFormat(
1382 "Couldn't set data: could not get SBValue: %s",
1394 lldb::ValueObjectSP value_sp(GetSP(locker));
1406 lldb::ValueObjectSP value_sp(GetSP(locker));
1410 if (value_sp->GetDeclaration(decl))
1424 lldb::ValueObjectSP value_sp(GetSP(locker));
1425 TargetSP target_sp(GetTarget().GetSP());
1426 if (value_sp && target_sp) {
1428 if (!read && !write)
1429 return sb_watchpoint;
1433 return sb_watchpoint;
1435 addr_t addr = GetLoadAddress();
1437 return sb_watchpoint;
1438 size_t byte_size = GetByteSize();
1440 return sb_watchpoint;
1450 WatchpointSP watchpoint_sp =
1451 target_sp->CreateWatchpoint(addr, byte_size, &type, watch_type, rc);
1454 if (watchpoint_sp) {
1455 sb_watchpoint.
SetSP(watchpoint_sp);
1457 if (value_sp->GetDeclaration(decl)) {
1466 }
else if (target_sp) {
1467 error.SetErrorStringWithFormat(
"could not get SBValue: %s",
1470 error.SetErrorString(
"could not set watchpoint, a target is required");
1473 return sb_watchpoint;
1484 return Watch(resolve_location, read, write,
error);
1492 if (IsInScope() && GetType().IsPointerType())
1493 sb_watchpoint = Dereference().Watch(resolve_location, read, write,
error);
1494 return sb_watchpoint;
1501 lldb::ValueObjectSP value_sp(GetSP(locker));
1504 persisted_sb.
SetSP(value_sp->Persist());
1506 return persisted_sb;