diff options
Diffstat (limited to 'source/API/SBThreadPlan.cpp')
| -rw-r--r-- | source/API/SBThreadPlan.cpp | 102 | 
1 files changed, 91 insertions, 11 deletions
diff --git a/source/API/SBThreadPlan.cpp b/source/API/SBThreadPlan.cpp index 131f84195908e..fc54f5b5f87e4 100644 --- a/source/API/SBThreadPlan.cpp +++ b/source/API/SBThreadPlan.cpp @@ -14,7 +14,6 @@  #include "lldb/API/SBSymbolContext.h"  #include "lldb/Breakpoint/BreakpointLocation.h"  #include "lldb/Core/Debugger.h" -#include "lldb/Core/State.h"  #include "lldb/Core/StreamFile.h"  #include "lldb/Interpreter/CommandInterpreter.h"  #include "lldb/Symbol/CompileUnit.h" @@ -31,6 +30,7 @@  #include "lldb/Target/ThreadPlanStepInstruction.h"  #include "lldb/Target/ThreadPlanStepOut.h"  #include "lldb/Target/ThreadPlanStepRange.h" +#include "lldb/Utility/State.h"  #include "lldb/Utility/Stream.h"  #include "lldb/Utility/StructuredData.h" @@ -143,6 +143,12 @@ bool SBThreadPlan::IsValid() {  SBThreadPlan  SBThreadPlan::QueueThreadPlanForStepOverRange(SBAddress &sb_start_address,                                                lldb::addr_t size) { +  SBError error; +  return QueueThreadPlanForStepOverRange(sb_start_address, size, error); +} + +SBThreadPlan SBThreadPlan::QueueThreadPlanForStepOverRange( +    SBAddress &sb_start_address, lldb::addr_t size, SBError &error) {    if (m_opaque_sp) {      Address *start_address = sb_start_address.get();      if (!start_address) { @@ -152,9 +158,16 @@ SBThreadPlan::QueueThreadPlanForStepOverRange(SBAddress &sb_start_address,      AddressRange range(*start_address, size);      SymbolContext sc;      start_address->CalculateSymbolContext(&sc); -    return SBThreadPlan( -        m_opaque_sp->GetThread().QueueThreadPlanForStepOverRange( -            false, range, sc, eAllThreads)); +    Status plan_status; + +    SBThreadPlan plan = +        SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepOverRange( +            false, range, sc, eAllThreads, plan_status)); + +    if (plan_status.Fail()) +      error.SetErrorString(plan_status.AsCString()); + +    return plan;    } else {      return SBThreadPlan();    } @@ -163,6 +176,13 @@ SBThreadPlan::QueueThreadPlanForStepOverRange(SBAddress &sb_start_address,  SBThreadPlan  SBThreadPlan::QueueThreadPlanForStepInRange(SBAddress &sb_start_address,                                              lldb::addr_t size) { +  SBError error; +  return QueueThreadPlanForStepInRange(sb_start_address, size, error); +} + +SBThreadPlan +SBThreadPlan::QueueThreadPlanForStepInRange(SBAddress &sb_start_address, +                                            lldb::addr_t size, SBError &error) {    if (m_opaque_sp) {      Address *start_address = sb_start_address.get();      if (!start_address) { @@ -172,8 +192,16 @@ SBThreadPlan::QueueThreadPlanForStepInRange(SBAddress &sb_start_address,      AddressRange range(*start_address, size);      SymbolContext sc;      start_address->CalculateSymbolContext(&sc); -    return SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepInRange( -        false, range, sc, NULL, eAllThreads)); + +    Status plan_status; +    SBThreadPlan plan = +        SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepInRange( +            false, range, sc, NULL, eAllThreads, plan_status)); + +    if (plan_status.Fail()) +      error.SetErrorString(plan_status.AsCString()); + +    return plan;    } else {      return SBThreadPlan();    } @@ -182,13 +210,28 @@ SBThreadPlan::QueueThreadPlanForStepInRange(SBAddress &sb_start_address,  SBThreadPlan  SBThreadPlan::QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,                                          bool first_insn) { +  SBError error; +  return QueueThreadPlanForStepOut(frame_idx_to_step_to, first_insn, error); +} + +SBThreadPlan +SBThreadPlan::QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to, +                                        bool first_insn, SBError &error) {    if (m_opaque_sp) {      SymbolContext sc;      sc = m_opaque_sp->GetThread().GetStackFrameAtIndex(0)->GetSymbolContext(          lldb::eSymbolContextEverything); -    return SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepOut( -        false, &sc, first_insn, false, eVoteYes, eVoteNoOpinion, -        frame_idx_to_step_to)); + +    Status plan_status; +    SBThreadPlan plan = +        SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepOut( +            false, &sc, first_insn, false, eVoteYes, eVoteNoOpinion, +            frame_idx_to_step_to, plan_status)); + +    if (plan_status.Fail()) +      error.SetErrorString(plan_status.AsCString()); + +    return plan;    } else {      return SBThreadPlan();    } @@ -196,13 +239,50 @@ SBThreadPlan::QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,  SBThreadPlan  SBThreadPlan::QueueThreadPlanForRunToAddress(SBAddress sb_address) { +  SBError error; +  return QueueThreadPlanForRunToAddress(sb_address, error); +} + +SBThreadPlan SBThreadPlan::QueueThreadPlanForRunToAddress(SBAddress sb_address, +                                                          SBError &error) {    if (m_opaque_sp) {      Address *address = sb_address.get();      if (!address)        return SBThreadPlan(); -    return SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForRunToAddress( -        false, *address, false)); +    Status plan_status; +    SBThreadPlan plan = +        SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForRunToAddress( +            false, *address, false, plan_status)); + +    if (plan_status.Fail()) +      error.SetErrorString(plan_status.AsCString()); + +    return plan; +  } else { +    return SBThreadPlan(); +  } +} + +SBThreadPlan +SBThreadPlan::QueueThreadPlanForStepScripted(const char *script_class_name) { +  SBError error; +  return QueueThreadPlanForStepScripted(script_class_name, error); +} + +SBThreadPlan +SBThreadPlan::QueueThreadPlanForStepScripted(const char *script_class_name, +                                             SBError &error) { +  if (m_opaque_sp) { +    Status plan_status; +    SBThreadPlan plan = +        SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepScripted( +            false, script_class_name, false, plan_status)); + +    if (plan_status.Fail()) +      error.SetErrorString(plan_status.AsCString()); + +    return plan;    } else {      return SBThreadPlan();    }  | 
