summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2013-10-18 17:38:31 +0000
committerJim Ingham <jingham@apple.com>2013-10-18 17:38:31 +0000
commit8ec10efc5d210c460aea11d31e0d1acd6af233ed (patch)
tree57bee666a5c91b43ad1ab67bbda59ee3ae2dd329 /lldb/source/Target
parentfbc057ea73cf5c7b6ff77bf040c698a6021e23f9 (diff)
downloadbcm5719-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.cpp11
-rw-r--r--lldb/source/Target/StackFrameList.cpp24
-rw-r--r--lldb/source/Target/Thread.cpp14
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;
OpenPOWER on IntegriCloud