diff options
Diffstat (limited to 'lldb/source/Interpreter/CommandObject.cpp')
-rw-r--r-- | lldb/source/Interpreter/CommandObject.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp index 4634b75..c819024 100644 --- a/lldb/source/Interpreter/CommandObject.cpp +++ b/lldb/source/Interpreter/CommandObject.cpp @@ -758,17 +758,23 @@ Target &CommandObject::GetDummyTarget() { return m_interpreter.GetDebugger().GetDummyTarget(); } -Target &CommandObject::GetSelectedOrDummyTarget(bool prefer_dummy) { - return m_interpreter.GetDebugger().GetSelectedOrDummyTarget(prefer_dummy); -} - -Target &CommandObject::GetSelectedTarget() { - assert(m_flags.AnySet(eCommandRequiresTarget | eCommandProcessMustBePaused | - eCommandProcessMustBeLaunched | eCommandRequiresFrame | - eCommandRequiresThread | eCommandRequiresProcess | - eCommandRequiresRegContext) && - "GetSelectedTarget called from object that may have no target"); - return *m_interpreter.GetDebugger().GetSelectedTarget(); +Target &CommandObject::GetTarget() { + // Prefer the frozen execution context in the command object. + if (Target *target = m_exe_ctx.GetTargetPtr()) + return *target; + + // Fallback to the command interpreter's execution context in case we get + // called after DoExecute has finished. For example, when doing multi-line + // expression that uses an input reader or breakpoint callbacks. + if (Target *target = m_interpreter.GetExecutionContext().GetTargetPtr()) + return *target; + + // Finally, if we have no other target, get the selected target. + if (TargetSP target_sp = m_interpreter.GetDebugger().GetSelectedTarget()) + return *target_sp; + + // We only have the dummy target. + return GetDummyTarget(); } Thread *CommandObject::GetDefaultThread() { |