diff options
author | Jim Ingham <jingham@apple.com> | 2013-10-18 17:38:31 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2013-10-18 17:38:31 +0000 |
commit | 8ec10efc5d210c460aea11d31e0d1acd6af233ed (patch) | |
tree | 57bee666a5c91b43ad1ab67bbda59ee3ae2dd329 /lldb/source/Target | |
parent | fbc057ea73cf5c7b6ff77bf040c698a6021e23f9 (diff) | |
download | bcm5719-llvm-8ec10efc5d210c460aea11d31e0d1acd6af233ed.tar.gz bcm5719-llvm-8ec10efc5d210c460aea11d31e0d1acd6af233ed.zip |
Mark the selected frame of the selected thread in backtraces.
<rdar://problem/15252474>
llvm-svn: 192989
Diffstat (limited to 'lldb/source/Target')
-rw-r--r-- | lldb/source/Target/StackFrame.cpp | 11 | ||||
-rw-r--r-- | lldb/source/Target/StackFrameList.cpp | 24 | ||||
-rw-r--r-- | lldb/source/Target/Thread.cpp | 14 |
3 files changed, 41 insertions, 8 deletions
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp index 3c4c43d9f44..a05c03db1ba 100644 --- a/lldb/source/Target/StackFrame.cpp +++ b/lldb/source/Target/StackFrame.cpp @@ -1275,7 +1275,7 @@ StackFrame::CalculateExecutionContext (ExecutionContext &exe_ctx) } void -StackFrame::DumpUsingSettingsFormat (Stream *strm) +StackFrame::DumpUsingSettingsFormat (Stream *strm, const char *frame_marker) { if (strm == NULL) return; @@ -1283,6 +1283,10 @@ StackFrame::DumpUsingSettingsFormat (Stream *strm) GetSymbolContext(eSymbolContextEverything); ExecutionContext exe_ctx (shared_from_this()); StreamString s; + + if (frame_marker) + s.PutCString(frame_marker); + const char *frame_format = NULL; Target *target = exe_ctx.GetTargetPtr(); if (target) @@ -1370,13 +1374,14 @@ StackFrame::HasCachedData () const bool StackFrame::GetStatus (Stream& strm, bool show_frame_info, - bool show_source) + bool show_source, + const char *frame_marker) { if (show_frame_info) { strm.Indent(); - DumpUsingSettingsFormat (&strm); + DumpUsingSettingsFormat (&strm, frame_marker); } if (show_source) diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp index 69309dfae7b..d95ab972a7a 100644 --- a/lldb/source/Target/StackFrameList.cpp +++ b/lldb/source/Target/StackFrameList.cpp @@ -863,7 +863,8 @@ StackFrameList::GetStatus (Stream& strm, uint32_t first_frame, uint32_t num_frames, bool show_frame_info, - uint32_t num_frames_with_source) + uint32_t num_frames_with_source, + const char *selected_frame_marker) { size_t num_frames_displayed = 0; @@ -880,15 +881,34 @@ StackFrameList::GetStatus (Stream& strm, else last_frame = first_frame + num_frames; + StackFrameSP selected_frame_sp = m_thread.GetSelectedFrame(); + const char *unselected_marker = NULL; + std::string buffer; + if (selected_frame_marker) + { + size_t len = strlen(selected_frame_marker); + buffer.insert(buffer.begin(), len, ' '); + unselected_marker = buffer.c_str(); + } + const char *marker = NULL; + for (frame_idx = first_frame; frame_idx < last_frame; ++frame_idx) { frame_sp = GetFrameAtIndex(frame_idx); if (frame_sp.get() == NULL) break; + if (selected_frame_marker != NULL) + { + if (frame_sp == selected_frame_sp) + marker = selected_frame_marker; + else + marker = unselected_marker; + } + if (!frame_sp->GetStatus (strm, show_frame_info, - num_frames_with_source > (first_frame - frame_idx))) + num_frames_with_source > (first_frame - frame_idx), marker)) break; ++num_frames_displayed; } diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index df0c143db52..98c26019b4a 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -1960,13 +1960,21 @@ Thread::GetStatus (Stream &strm, uint32_t start_frame, uint32_t num_frames, uint strm.IndentMore(); const bool show_frame_info = true; - strm.IndentMore (); + + const char *selected_frame_marker = NULL; + if (num_frames == 1 || (GetID() != GetProcess()->GetThreadList().GetSelectedThread()->GetID())) + strm.IndentMore (); + else + selected_frame_marker = "* "; + num_frames_shown = GetStackFrameList ()->GetStatus (strm, start_frame, num_frames, show_frame_info, - num_frames_with_source); - strm.IndentLess(); + num_frames_with_source, + selected_frame_marker); + if (num_frames == 1) + strm.IndentLess(); strm.IndentLess(); } return num_frames_shown; |