diff options
author | Greg Clayton <gclayton@apple.com> | 2013-01-09 19:44:40 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2013-01-09 19:44:40 +0000 |
commit | f9fc609fe7e246f98ba72818af1827a269cf71ee (patch) | |
tree | 676a461898bf2f4feef048d3254f326973b68064 /lldb/source/Commands/CommandObjectSettings.cpp | |
parent | eb9ae768647ee4280e4f25d58180067e1ed3c5ab (diff) | |
download | llvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.zip llvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.tar.gz llvm-f9fc609fe7e246f98ba72818af1827a269cf71ee.tar.bz2 |
Expanded the flags that can be set for a command object in lldb_private::CommandObject. This list of available flags are:
enum
{
//----------------------------------------------------------------------
// eFlagRequiresTarget
//
// Ensures a valid target is contained in m_exe_ctx prior to executing
// the command. If a target doesn't exist or is invalid, the command
// will fail and CommandObject::GetInvalidTargetDescription() will be
// returned as the error. CommandObject subclasses can override the
// virtual function for GetInvalidTargetDescription() to provide custom
// strings when needed.
//----------------------------------------------------------------------
eFlagRequiresTarget = (1u << 0),
//----------------------------------------------------------------------
// eFlagRequiresProcess
//
// Ensures a valid process is contained in m_exe_ctx prior to executing
// the command. If a process doesn't exist or is invalid, the command
// will fail and CommandObject::GetInvalidProcessDescription() will be
// returned as the error. CommandObject subclasses can override the
// virtual function for GetInvalidProcessDescription() to provide custom
// strings when needed.
//----------------------------------------------------------------------
eFlagRequiresProcess = (1u << 1),
//----------------------------------------------------------------------
// eFlagRequiresThread
//
// Ensures a valid thread is contained in m_exe_ctx prior to executing
// the command. If a thread doesn't exist or is invalid, the command
// will fail and CommandObject::GetInvalidThreadDescription() will be
// returned as the error. CommandObject subclasses can override the
// virtual function for GetInvalidThreadDescription() to provide custom
// strings when needed.
//----------------------------------------------------------------------
eFlagRequiresThread = (1u << 2),
//----------------------------------------------------------------------
// eFlagRequiresFrame
//
// Ensures a valid frame is contained in m_exe_ctx prior to executing
// the command. If a frame doesn't exist or is invalid, the command
// will fail and CommandObject::GetInvalidFrameDescription() will be
// returned as the error. CommandObject subclasses can override the
// virtual function for GetInvalidFrameDescription() to provide custom
// strings when needed.
//----------------------------------------------------------------------
eFlagRequiresFrame = (1u << 3),
//----------------------------------------------------------------------
// eFlagRequiresRegContext
//
// Ensures a valid register context (from the selected frame if there
// is a frame in m_exe_ctx, or from the selected thread from m_exe_ctx)
// is availble from m_exe_ctx prior to executing the command. If a
// target doesn't exist or is invalid, the command will fail and
// CommandObject::GetInvalidRegContextDescription() will be returned as
// the error. CommandObject subclasses can override the virtual function
// for GetInvalidRegContextDescription() to provide custom strings when
// needed.
//----------------------------------------------------------------------
eFlagRequiresRegContext = (1u << 4),
//----------------------------------------------------------------------
// eFlagTryTargetAPILock
//
// Attempts to acquire the target lock if a target is selected in the
// command interpreter. If the command object fails to acquire the API
// lock, the command will fail with an appropriate error message.
//----------------------------------------------------------------------
eFlagTryTargetAPILock = (1u << 5),
//----------------------------------------------------------------------
// eFlagProcessMustBeLaunched
//
// Verifies that there is a launched process in m_exe_ctx, if there
// isn't, the command will fail with an appropriate error message.
//----------------------------------------------------------------------
eFlagProcessMustBeLaunched = (1u << 6),
//----------------------------------------------------------------------
// eFlagProcessMustBePaused
//
// Verifies that there is a paused process in m_exe_ctx, if there
// isn't, the command will fail with an appropriate error message.
//----------------------------------------------------------------------
eFlagProcessMustBePaused = (1u << 7)
};
Now each command object contains a "ExecutionContext m_exe_ctx;" member variable that gets initialized prior to running the command. The validity of the target objects in m_exe_ctx are checked to ensure that any target/process/thread/frame/reg context that are required are valid prior to executing the command. Each command object also contains a Mutex::Locker m_api_locker which gets used if eFlagTryTargetAPILock is set. This centralizes a lot of checking code that was previously and inconsistently implemented across many commands.
llvm-svn: 171990
Diffstat (limited to 'lldb/source/Commands/CommandObjectSettings.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectSettings.cpp | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/lldb/source/Commands/CommandObjectSettings.cpp b/lldb/source/Commands/CommandObjectSettings.cpp index 6a6e8a6..c7502d1 100644 --- a/lldb/source/Commands/CommandObjectSettings.cpp +++ b/lldb/source/Commands/CommandObjectSettings.cpp @@ -202,12 +202,10 @@ insert-before or insert-after.\n"); } else { - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - // Complete setting value const char *setting_var_name = input.GetArgumentAtIndex(setting_var_idx); Error error; - lldb::OptionValueSP value_sp (m_interpreter.GetDebugger().GetPropertyValue(&exe_ctx, setting_var_name, false, error)); + lldb::OptionValueSP value_sp (m_interpreter.GetDebugger().GetPropertyValue(&m_exe_ctx, setting_var_name, false, error)); if (value_sp) { value_sp->AutoComplete (m_interpreter, @@ -256,7 +254,6 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); Error error; if (m_options.m_global) { @@ -268,7 +265,7 @@ protected: if (error.Success()) { - error = m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + error = m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationAssign, var_name, var_value_string.c_str()); @@ -357,7 +354,6 @@ protected: virtual bool DoExecute (Args& args, CommandReturnObject &result) { - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); result.SetStatus (eReturnStatusSuccessFinishResult); const size_t argc = args.GetArgumentCount (); @@ -367,7 +363,7 @@ protected: { const char *property_path = args.GetArgumentAtIndex (i); - Error error(m_interpreter.GetDebugger().DumpPropertyValue (&exe_ctx, result.GetOutputStream(), property_path, OptionValue::eDumpGroupValue)); + Error error(m_interpreter.GetDebugger().DumpPropertyValue (&m_exe_ctx, result.GetOutputStream(), property_path, OptionValue::eDumpGroupValue)); if (error.Success()) { result.GetOutputStream().EOL(); @@ -381,7 +377,7 @@ protected: } else { - m_interpreter.GetDebugger().DumpAllPropertyValues (& exe_ctx, result.GetOutputStream(), OptionValue::eDumpGroupValue); + m_interpreter.GetDebugger().DumpAllPropertyValues (&m_exe_ctx, result.GetOutputStream(), OptionValue::eDumpGroupValue); } return result.Succeeded(); @@ -450,7 +446,6 @@ protected: virtual bool DoExecute (Args& args, CommandReturnObject &result) { - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); result.SetStatus (eReturnStatusSuccessFinishResult); const bool will_modify = false; @@ -463,7 +458,7 @@ protected: { const char *property_path = args.GetArgumentAtIndex (i); - const Property *property = m_interpreter.GetDebugger().GetValueProperties()->GetPropertyAtPath (&exe_ctx, will_modify, property_path); + const Property *property = m_interpreter.GetDebugger().GetValueProperties()->GetPropertyAtPath (&m_exe_ctx, will_modify, property_path); if (property) { @@ -592,8 +587,7 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error (m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error (m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationRemove, var_name, var_value_string.c_str())); @@ -719,8 +713,7 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationReplace, var_name, var_value_string.c_str())); @@ -853,8 +846,7 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationInsertBefore, var_name, var_value_string.c_str())); @@ -982,8 +974,7 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationInsertAfter, var_name, var_value_string.c_str())); @@ -1102,8 +1093,7 @@ protected: StripLeadingSpaces(var_value_str); std::string var_value_string = var_value_str.str(); - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error(m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error(m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationAppend, var_name, var_value_string.c_str())); @@ -1196,8 +1186,7 @@ protected: return false; } - ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); - Error error (m_interpreter.GetDebugger().SetPropertyValue (&exe_ctx, + Error error (m_interpreter.GetDebugger().SetPropertyValue (&m_exe_ctx, eVarSetOperationClear, var_name, NULL)); |