mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:58:11 +08:00
Expose more convenience functionality in the python classes.
lldb.SBValueList now exposes the len() method and also allows item access: lldb.SBValueList[<int>] - where <int> is an integer index into the list, returns a single lldb.SBValue which might be empty if the index is out of range lldb.SBValueList[<str>] - where <str> is the name to look for, returns a list() of lldb.SBValue objects with any matching values (the list might be empty if nothing matches) lldb.SBValueList[<re>] - where <re> is a compiles regular expression, returns a list of lldb.SBValue objects for containing any matches or a empty list if nothing matches lldb.SBFrame now exposes: lldb.SBFrame.variables => SBValueList of all variables that are in scope lldb.SBFrame.vars => see lldb.SBFrame.variables lldb.SBFrame.locals => SBValueList of all variables that are locals in the current frame lldb.SBFrame.arguments => SBValueList of all variables that are arguments in the current frame lldb.SBFrame.args => see lldb.SBFrame.arguments lldb.SBFrame.statics => SBValueList of all static variables lldb.SBFrame.registers => SBValueList of all registers for the current frame lldb.SBFrame.regs => see lldb.SBFrame.registers Combine any of the above properties with the new lldb.SBValueList functionality and now you can do: y = lldb.frame.vars['rect.origin.y'] or vars = lldb.frame.vars for i in range len(vars): print vars[i] Also expose "lldb.SBFrame.var(<str>)" where <str> can be en expression path for any variable or child within the variable. This makes it easier to get a value from the current frame like "rect.origin.y". The resulting value is also not a constant result as expressions will return, but a live value that will continue to track the current value for the variable expression path. lldb.SBValue now exposes: lldb.SBValue.unsigned => unsigned integer for the value lldb.SBValue.signed => a signed integer for the value llvm-svn: 149684
This commit is contained in:
@@ -455,6 +455,39 @@ SBFrame::Clear()
|
||||
m_opaque_sp.reset();
|
||||
}
|
||||
|
||||
lldb::SBValue
|
||||
SBFrame::GetValueForVariablePath (const char *var_path)
|
||||
{
|
||||
SBValue sb_value;
|
||||
StackFrameSP frame_sp(GetFrameSP());
|
||||
if (frame_sp)
|
||||
{
|
||||
lldb::DynamicValueType use_dynamic = frame_sp->CalculateTarget()->GetPreferDynamicValue();
|
||||
sb_value = GetValueForVariablePath (var_path, use_dynamic);
|
||||
}
|
||||
return sb_value;
|
||||
}
|
||||
|
||||
lldb::SBValue
|
||||
SBFrame::GetValueForVariablePath (const char *var_path, DynamicValueType use_dynamic)
|
||||
{
|
||||
SBValue sb_value;
|
||||
StackFrameSP frame_sp(GetFrameSP());
|
||||
if (frame_sp && var_path && var_path[0])
|
||||
{
|
||||
Mutex::Locker api_locker (frame_sp->GetThread().GetProcess().GetTarget().GetAPIMutex());
|
||||
VariableSP var_sp;
|
||||
Error error;
|
||||
ValueObjectSP value_sp (frame_sp->GetValueForVariableExpressionPath (var_path,
|
||||
use_dynamic,
|
||||
StackFrame::eExpressionPathOptionCheckPtrVsMember,
|
||||
var_sp,
|
||||
error));
|
||||
*sb_value = value_sp;
|
||||
}
|
||||
return sb_value;
|
||||
}
|
||||
|
||||
SBValue
|
||||
SBFrame::FindVariable (const char *name)
|
||||
{
|
||||
@@ -467,6 +500,7 @@ SBFrame::FindVariable (const char *name)
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
SBValue
|
||||
SBFrame::FindVariable (const char *name, lldb::DynamicValueType use_dynamic)
|
||||
|
||||
Reference in New Issue
Block a user