diff options
-rw-r--r-- | lldb/include/lldb/Target/ThreadPlanStepInstruction.h | 1 | ||||
-rw-r--r-- | lldb/source/Target/ThreadPlanStepInstruction.cpp | 13 |
2 files changed, 11 insertions, 3 deletions
diff --git a/lldb/include/lldb/Target/ThreadPlanStepInstruction.h b/lldb/include/lldb/Target/ThreadPlanStepInstruction.h index 9210b142d15..eb4a64bcbc8 100644 --- a/lldb/include/lldb/Target/ThreadPlanStepInstruction.h +++ b/lldb/include/lldb/Target/ThreadPlanStepInstruction.h @@ -50,6 +50,7 @@ private: bool m_stop_other_threads; bool m_step_over; // These two are used only for the step over case. + bool m_start_has_symbol; StackID m_stack_id; StackID m_parent_frame_id; diff --git a/lldb/source/Target/ThreadPlanStepInstruction.cpp b/lldb/source/Target/ThreadPlanStepInstruction.cpp index b07b374e38a..f644ee88f70 100644 --- a/lldb/source/Target/ThreadPlanStepInstruction.cpp +++ b/lldb/source/Target/ThreadPlanStepInstruction.cpp @@ -44,7 +44,11 @@ ThreadPlanStepInstruction::ThreadPlanStepInstruction m_step_over (step_over) { m_instruction_addr = m_thread.GetRegisterContext()->GetPC(0); - m_stack_id = m_thread.GetStackFrameAtIndex(0)->GetStackID(); + StackFrameSP m_start_frame_sp(m_thread.GetStackFrameAtIndex(0)); + m_stack_id = m_start_frame_sp->GetStackID(); + + m_start_has_symbol = m_start_frame_sp->GetSymbolContext(eSymbolContextSymbol).symbol != NULL; + StackFrameSP parent_frame_sp = m_thread.GetStackFrameAtIndex(1); if (parent_frame_sp) m_parent_frame_id = parent_frame_sp->GetStackID(); @@ -68,6 +72,9 @@ ThreadPlanStepInstruction::GetDescription (Stream *s, lldb::DescriptionLevel lev { s->Printf ("Stepping one instruction past "); s->Address(m_instruction_addr, sizeof (addr_t)); + if (!m_start_has_symbol) + s->Printf(" which has no symbol"); + if (m_step_over) s->Printf(" stepping over calls"); else @@ -123,7 +130,7 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr) StackFrame *return_frame = m_thread.GetStackFrameAtIndex(1).get(); if (return_frame) { - if (return_frame->GetStackID() != m_parent_frame_id) + if (return_frame->GetStackID() != m_parent_frame_id || m_start_has_symbol) { if (log) { @@ -153,7 +160,7 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr) { if (log) { - log->PutCString("The stack id we are stepping in changed, but our parent frame did not. " + log->PutCString("The stack id we are stepping in changed, but our parent frame did not when stepping from code with no symbols. " "We are probably just confused about where we are, stopping."); } SetPlanComplete(); |