本文整理汇总了C++中Process::GetLanguageRuntime方法的典型用法代码示例。如果您正苦于以下问题:C++ Process::GetLanguageRuntime方法的具体用法?C++ Process::GetLanguageRuntime怎么用?C++ Process::GetLanguageRuntime使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Process
的用法示例。
在下文中一共展示了Process::GetLanguageRuntime方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateValue
bool ValueObjectDynamicValue::UpdateValue() {
SetValueIsValid(false);
m_error.Clear();
if (!m_parent->UpdateValueIfNeeded(false)) {
// The dynamic value failed to get an error, pass the error along
if (m_error.Success() && m_parent->GetError().Fail())
m_error = m_parent->GetError();
return false;
}
// Setting our type_sp to NULL will route everything back through our parent
// which is equivalent to not using dynamic values.
if (m_use_dynamic == lldb::eNoDynamicValues) {
m_dynamic_type_info.Clear();
return true;
}
ExecutionContext exe_ctx(GetExecutionContextRef());
Target *target = exe_ctx.GetTargetPtr();
if (target) {
m_data.SetByteOrder(target->GetArchitecture().GetByteOrder());
m_data.SetAddressByteSize(target->GetArchitecture().GetAddressByteSize());
}
// First make sure our Type and/or Address haven't changed:
Process *process = exe_ctx.GetProcessPtr();
if (!process)
return false;
TypeAndOrName class_type_or_name;
Address dynamic_address;
bool found_dynamic_type = false;
Value::ValueType value_type;
LanguageRuntime *runtime = nullptr;
lldb::LanguageType known_type = m_parent->GetObjectRuntimeLanguage();
if (known_type != lldb::eLanguageTypeUnknown &&
known_type != lldb::eLanguageTypeC) {
runtime = process->GetLanguageRuntime(known_type);
if (runtime)
found_dynamic_type = runtime->GetDynamicTypeAndAddress(
*m_parent, m_use_dynamic, class_type_or_name, dynamic_address,
value_type);
} else {
runtime = process->GetLanguageRuntime(lldb::eLanguageTypeC_plus_plus);
if (runtime)
found_dynamic_type = runtime->GetDynamicTypeAndAddress(
*m_parent, m_use_dynamic, class_type_or_name, dynamic_address,
value_type);
if (!found_dynamic_type) {
runtime = process->GetLanguageRuntime(lldb::eLanguageTypeObjC);
if (runtime)
found_dynamic_type = runtime->GetDynamicTypeAndAddress(
*m_parent, m_use_dynamic, class_type_or_name, dynamic_address,
value_type);
}
}
// Getting the dynamic value may have run the program a bit, and so marked us
// as needing updating, but we really don't...
m_update_point.SetUpdated();
if (runtime && found_dynamic_type) {
if (class_type_or_name.HasType()) {
m_type_impl =
TypeImpl(m_parent->GetCompilerType(),
runtime->FixUpDynamicType(class_type_or_name, *m_parent)
.GetCompilerType());
} else {
m_type_impl.Clear();
}
} else {
m_type_impl.Clear();
}
// If we don't have a dynamic type, then make ourselves just a echo of our
// parent. Or we could return false, and make ourselves an echo of our
// parent?
if (!found_dynamic_type) {
if (m_dynamic_type_info)
SetValueDidChange(true);
ClearDynamicTypeInformation();
m_dynamic_type_info.Clear();
m_value = m_parent->GetValue();
m_error = m_value.GetValueAsData(&exe_ctx, m_data, 0, GetModule().get());
return m_error.Success();
}
Value old_value(m_value);
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_TYPES));
bool has_changed_type = false;
if (!m_dynamic_type_info) {
m_dynamic_type_info = class_type_or_name;
//.........这里部分代码省略.........