diff options
author | Greg Clayton <gclayton@apple.com> | 2010-09-03 17:10:42 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2010-09-03 17:10:42 +0000 |
commit | 2cad65a595008e4c0b17ac2cfb59cadef87bfc38 (patch) | |
tree | c36d15c02e48217f109d222a05d3b4300359141e /lldb/source/Target/Thread.cpp | |
parent | 90ca316167817d05e22014d28f1e886e4a9d4a7a (diff) | |
download | bcm5719-llvm-2cad65a595008e4c0b17ac2cfb59cadef87bfc38.tar.gz bcm5719-llvm-2cad65a595008e4c0b17ac2cfb59cadef87bfc38.zip |
Fixed the StackFrame to correctly resolve the StackID's SymbolContextScope.
Added extra logging for stepping.
Fixed an issue where cached stack frame data could be lost between runs when
the thread plans read a stack frame.
llvm-svn: 112973
Diffstat (limited to 'lldb/source/Target/Thread.cpp')
-rw-r--r-- | lldb/source/Target/Thread.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index 1c8265add06..ce9216a7466 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -293,17 +293,28 @@ Vote Thread::ShouldReportStop (Event* event_ptr) { StateType thread_state = GetResumeState (); - if (thread_state == eStateSuspended - || thread_state == eStateInvalid) + Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP); + + if (thread_state == eStateSuspended || thread_state == eStateInvalid) + { + if (log) + log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote %i (state was suspended or invalid)\n", GetID(), eVoteNoOpinion); return eVoteNoOpinion; + } if (m_completed_plan_stack.size() > 0) { // Don't use GetCompletedPlan here, since that suppresses private plans. + if (log) + log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote for complete stack's back plan\n", GetID()); return m_completed_plan_stack.back()->ShouldReportStop (event_ptr); } else + { + if (log) + log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote for current plan\n", GetID()); return GetCurrentPlan()->ShouldReportStop (event_ptr); + } } Vote @@ -797,7 +808,7 @@ StackFrameList & Thread::GetStackFrameList () { if (m_curr_frames_ap.get() == NULL) - m_curr_frames_ap.reset (new StackFrameList (*this, m_prev_frames_ap.release(), true)); + m_curr_frames_ap.reset (new StackFrameList (*this, m_prev_frames_sp, true)); return *m_curr_frames_ap; } @@ -813,8 +824,13 @@ Thread::GetStackFrameCount() void Thread::ClearStackFrames () { - if (m_curr_frames_ap.get()) - m_prev_frames_ap = m_curr_frames_ap; + if (m_curr_frames_ap.get() && m_curr_frames_ap->GetNumFrames (false) > 1) + m_prev_frames_sp.reset (m_curr_frames_ap.release()); + else + m_curr_frames_ap.release(); + +// StackFrameList::Merge (m_curr_frames_ap, m_prev_frames_sp); +// assert (m_curr_frames_ap.get() == NULL); } lldb::StackFrameSP |