[Lldb-commits] [lldb] [lldb] add a marker before skipped frames (PR #167550)

Charles Zablit via lldb-commits lldb-commits at lists.llvm.org
Tue Nov 18 10:39:10 PST 2025


https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/167550

>From 34a821b711f2e89898a1cf222d6500ee358e41ae Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Tue, 11 Nov 2025 18:09:05 +0100
Subject: [PATCH 1/3] [lldb] add a marker before skipped frames

---
 lldb/include/lldb/Target/StackFrame.h     | 21 +++++++++++++++---
 lldb/include/lldb/Target/StackFrameList.h |  8 +++++++
 lldb/source/Target/StackFrame.cpp         | 22 +++++++++++++------
 lldb/source/Target/StackFrameList.cpp     | 26 +++++++++++++++++++++--
 4 files changed, 66 insertions(+), 11 deletions(-)

diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index cdbe8ae3c6779..c3e3c945e114c 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -335,11 +335,16 @@ class StackFrame : public ExecutionContextScope,
   /// \param[in] frame_marker
   ///   Optional string that will be prepended to the frame output description.
   ///
+  /// \param[in] skipped_frame_marker
+  ///   Optional string that will be prepended to the first or last non skipped
+  ///   frame output description.
+  ///
   /// \return
   ///   \b true if and only if dumping with the given \p format worked.
   bool DumpUsingFormat(Stream &strm,
                        const lldb_private::FormatEntity::Entry *format,
-                       llvm::StringRef frame_marker = {});
+                       llvm::StringRef frame_marker = {},
+                       llvm::StringRef skipped_frame_marker = {});
 
   /// Print a description for this frame using the frame-format formatter
   /// settings. If the current frame-format settings are invalid, then the
@@ -353,8 +358,13 @@ class StackFrame : public ExecutionContextScope,
   ///
   /// \param [in] frame_marker
   ///   Optional string that will be prepended to the frame output description.
+  ///
+  /// \param[in] skipped_frame_marker
+  ///   Optional string that will be prepended to the first or last non skipped
+  ///   frame output description.
   void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
-                               const char *frame_marker = nullptr);
+                               const char *frame_marker = nullptr,
+                               const std::wstring skipped_frame_marker = L"");
 
   /// Print a description for this frame using a default format.
   ///
@@ -387,10 +397,15 @@ class StackFrame : public ExecutionContextScope,
   /// \param[in] frame_marker
   ///   Passed to DumpUsingSettingsFormat() for the frame info printing.
   ///
+  ///
+  /// \param[in] skipped_frame_marker
+  ///   Optional string that will be prepended to the first or last non skipped
+  ///   frame output description.
   /// \return
   ///   Returns true if successful.
   bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
-                 bool show_unique = false, const char *frame_marker = nullptr);
+                 bool show_unique = false, const char *frame_marker = nullptr,
+                 const std::wstring skipped_frame_marker = L"");
 
   /// Query whether this frame is a concrete frame on the call stack, or if it
   /// is an inlined frame derived from the debug information and presented by
diff --git a/lldb/include/lldb/Target/StackFrameList.h b/lldb/include/lldb/Target/StackFrameList.h
index ea9aab86b8ea1..122c256bd61d3 100644
--- a/lldb/include/lldb/Target/StackFrameList.h
+++ b/lldb/include/lldb/Target/StackFrameList.h
@@ -49,6 +49,14 @@ class StackFrameList {
   /// Resets the selected frame index of this object.
   void ClearSelectedFrameIndex();
 
+  /// Return \code true if the next frame is hidden. False otherwise or if it's
+  /// the last frame.
+  bool IsNextFrameHidden(lldb_private::StackFrame &frame);
+
+  /// Return \code true if the previous frame is hidden. False otherwise or if
+  /// it's the first frame.
+  bool IsPreviousFrameHidden(lldb_private::StackFrame &frame);
+
   /// Get the currently selected frame index.
   /// We should only call SelectMostRelevantFrame if (a) the user hasn't already
   /// selected a frame, and (b) if this really is a user facing
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 2ed58c5331df4..03c595cd49656 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -37,6 +37,7 @@
 #include "lldb/ValueObject/ValueObjectConstResult.h"
 #include "lldb/ValueObject/ValueObjectMemory.h"
 #include "lldb/ValueObject/ValueObjectVariable.h"
+#include "llvm/Support/ConvertUTF.h"
 
 #include "lldb/lldb-enumerations.h"
 
@@ -1920,11 +1921,13 @@ void StackFrame::CalculateExecutionContext(ExecutionContext &exe_ctx) {
 
 bool StackFrame::DumpUsingFormat(Stream &strm,
                                  const FormatEntity::Entry *format,
-                                 llvm::StringRef frame_marker) {
+                                 llvm::StringRef frame_marker,
+                                 llvm::StringRef skipped_frame_marker) {
   GetSymbolContext(eSymbolContextEverything);
   ExecutionContext exe_ctx(shared_from_this());
   StreamString s;
   s.PutCString(frame_marker);
+  s.PutCString(skipped_frame_marker);
 
   if (format && FormatEntity::Format(*format, s, &m_sc, &exe_ctx, nullptr,
                                      nullptr, false, false)) {
@@ -1934,8 +1937,9 @@ bool StackFrame::DumpUsingFormat(Stream &strm,
   return false;
 }
 
-void StackFrame::DumpUsingSettingsFormat(Stream *strm, bool show_unique,
-                                         const char *frame_marker) {
+void StackFrame::DumpUsingSettingsFormat(
+    Stream *strm, bool show_unique, const char *frame_marker,
+    const std::wstring skipped_frame_marker) {
   if (strm == nullptr)
     return;
 
@@ -1953,7 +1957,11 @@ void StackFrame::DumpUsingSettingsFormat(Stream *strm, bool show_unique,
       frame_format = &format_entry;
     }
   }
-  if (!DumpUsingFormat(*strm, frame_format, frame_marker)) {
+
+  std::string skipped_frame_delimiter_utf8;
+  llvm::convertWideToUTF8(skipped_frame_marker, skipped_frame_delimiter_utf8);
+  if (!DumpUsingFormat(*strm, frame_format, frame_marker,
+                       skipped_frame_delimiter_utf8)) {
     Dump(strm, true, false);
     strm->EOL();
   }
@@ -2034,10 +2042,12 @@ bool StackFrame::HasCachedData() const {
 }
 
 bool StackFrame::GetStatus(Stream &strm, bool show_frame_info, bool show_source,
-                           bool show_unique, const char *frame_marker) {
+                           bool show_unique, const char *frame_marker,
+                           const std::wstring skipped_frame_marker) {
   if (show_frame_info) {
     strm.Indent();
-    DumpUsingSettingsFormat(&strm, show_unique, frame_marker);
+    DumpUsingSettingsFormat(&strm, show_unique, frame_marker,
+                            skipped_frame_marker);
   }
 
   if (show_source) {
diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp
index ccf874fc03ebd..80f77e2bcee16 100644
--- a/lldb/source/Target/StackFrameList.cpp
+++ b/lldb/source/Target/StackFrameList.cpp
@@ -879,6 +879,24 @@ StackFrameList::GetStackFrameSPForStackFramePtr(StackFrame *stack_frame_ptr) {
   return ret_sp;
 }
 
+bool StackFrameList::IsNextFrameHidden(lldb_private::StackFrame &frame) {
+  uint32_t frame_idx = frame.GetFrameIndex();
+  StackFrameSP frame_sp = GetFrameAtIndex(frame_idx + 1);
+  if (!frame_sp)
+    return false;
+  return frame_sp->IsHidden();
+}
+
+bool StackFrameList::IsPreviousFrameHidden(lldb_private::StackFrame &frame) {
+  uint32_t frame_idx = frame.GetFrameIndex();
+  if (frame_idx == 0)
+    return false;
+  StackFrameSP frame_sp = GetFrameAtIndex(frame_idx - 1);
+  if (!frame_sp)
+    return false;
+  return frame_sp->IsHidden();
+}
+
 size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
                                  uint32_t num_frames, bool show_frame_info,
                                  uint32_t num_frames_with_source,
@@ -920,6 +938,11 @@ size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
       else
         marker = unselected_marker;
     }
+    std::wstring skipped_frame_marker = L" ";
+    if (IsPreviousFrameHidden(*frame_sp))
+      skipped_frame_marker = L"﹈";
+    else if (IsNextFrameHidden(*frame_sp))
+      skipped_frame_marker = L"﹇";
 
     // Hide uninteresting frames unless it's the selected frame.
     if (!show_hidden && frame_sp != selected_frame_sp && frame_sp->IsHidden())
@@ -933,10 +956,9 @@ size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
             m_thread.GetID(), num_frames_displayed))
       break;
 
-
     if (!frame_sp->GetStatus(strm, show_frame_info,
                              num_frames_with_source > (first_frame - frame_idx),
-                             show_unique, marker))
+                             show_unique, marker, skipped_frame_marker))
       break;
     ++num_frames_displayed;
   }

>From 45cb05272f8a85001004330771f89cd3707d9830 Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Tue, 18 Nov 2025 19:35:05 +0100
Subject: [PATCH 2/3] align all markers

---
 lldb/include/lldb/Target/StackFrame.h         |  8 ++--
 lldb/include/lldb/Target/StackFrameList.h     |  5 ++-
 .../lldb/Utility/DiagnosticsRendering.h       | 11 +++++
 lldb/source/Target/StackFrame.cpp             | 22 ++++------
 lldb/source/Target/StackFrameList.cpp         | 42 ++++++++++---------
 lldb/source/Target/Thread.cpp                 |  6 +--
 lldb/source/Utility/DiagnosticsRendering.cpp  | 17 +++++++-
 7 files changed, 67 insertions(+), 44 deletions(-)

diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index c3e3c945e114c..7cae4d6e69972 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -343,8 +343,7 @@ class StackFrame : public ExecutionContextScope,
   ///   \b true if and only if dumping with the given \p format worked.
   bool DumpUsingFormat(Stream &strm,
                        const lldb_private::FormatEntity::Entry *format,
-                       llvm::StringRef frame_marker = {},
-                       llvm::StringRef skipped_frame_marker = {});
+                       llvm::StringRef frame_marker = {});
 
   /// Print a description for this frame using the frame-format formatter
   /// settings. If the current frame-format settings are invalid, then the
@@ -363,8 +362,7 @@ class StackFrame : public ExecutionContextScope,
   ///   Optional string that will be prepended to the first or last non skipped
   ///   frame output description.
   void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
-                               const char *frame_marker = nullptr,
-                               const std::wstring skipped_frame_marker = L"");
+                               const std::wstring frame_marker = L"");
 
   /// Print a description for this frame using a default format.
   ///
@@ -404,7 +402,7 @@ class StackFrame : public ExecutionContextScope,
   /// \return
   ///   Returns true if successful.
   bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
-                 bool show_unique = false, const char *frame_marker = nullptr,
+                 bool show_unique = false,
                  const std::wstring skipped_frame_marker = L"");
 
   /// Query whether this frame is a concrete frame on the call stack, or if it
diff --git a/lldb/include/lldb/Target/StackFrameList.h b/lldb/include/lldb/Target/StackFrameList.h
index 122c256bd61d3..4587098c8902f 100644
--- a/lldb/include/lldb/Target/StackFrameList.h
+++ b/lldb/include/lldb/Target/StackFrameList.h
@@ -57,6 +57,9 @@ class StackFrameList {
   /// it's the first frame.
   bool IsPreviousFrameHidden(lldb_private::StackFrame &frame);
 
+  std::wstring FrameMarker(lldb::StackFrameSP frame_sp,
+                           lldb::StackFrameSP selected_frame_sp);
+
   /// Get the currently selected frame index.
   /// We should only call SelectMostRelevantFrame if (a) the user hasn't already
   /// selected a frame, and (b) if this really is a user facing
@@ -104,7 +107,7 @@ class StackFrameList {
   size_t GetStatus(Stream &strm, uint32_t first_frame, uint32_t num_frames,
                    bool show_frame_info, uint32_t num_frames_with_source,
                    bool show_unique = false, bool show_hidden = false,
-                   const char *frame_marker = nullptr);
+                   bool show_selected_frame = false);
 
   /// Returns whether we have currently fetched all the frames of a stack.
   bool WereAllFramesFetched() const;
diff --git a/lldb/include/lldb/Utility/DiagnosticsRendering.h b/lldb/include/lldb/Utility/DiagnosticsRendering.h
index dd33d671c24a5..3dfa9b0880f70 100644
--- a/lldb/include/lldb/Utility/DiagnosticsRendering.h
+++ b/lldb/include/lldb/Utility/DiagnosticsRendering.h
@@ -64,6 +64,17 @@ void RenderDiagnosticDetails(Stream &stream,
                              bool show_inline,
                              llvm::ArrayRef<DiagnosticDetail> details);
 
+/// Returns whether or not the current terminal supports Unicode rendering.
+///
+/// The value is cached after the first computation.
+///
+/// On POSIX systems, we check if the LANG environment variable contains the
+/// substring "UTF-8";
+///
+/// On Windows, we check that we are running from the Windows Terminal
+/// application.
+bool TerminalSupportsUnicode();
+
 class DiagnosticError
     : public llvm::ErrorInfo<DiagnosticError, CloneableECError> {
 public:
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 03c595cd49656..c47a6e2dc444c 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1921,13 +1921,11 @@ void StackFrame::CalculateExecutionContext(ExecutionContext &exe_ctx) {
 
 bool StackFrame::DumpUsingFormat(Stream &strm,
                                  const FormatEntity::Entry *format,
-                                 llvm::StringRef frame_marker,
-                                 llvm::StringRef skipped_frame_marker) {
+                                 llvm::StringRef frame_marker) {
   GetSymbolContext(eSymbolContextEverything);
   ExecutionContext exe_ctx(shared_from_this());
   StreamString s;
   s.PutCString(frame_marker);
-  s.PutCString(skipped_frame_marker);
 
   if (format && FormatEntity::Format(*format, s, &m_sc, &exe_ctx, nullptr,
                                      nullptr, false, false)) {
@@ -1937,9 +1935,8 @@ bool StackFrame::DumpUsingFormat(Stream &strm,
   return false;
 }
 
-void StackFrame::DumpUsingSettingsFormat(
-    Stream *strm, bool show_unique, const char *frame_marker,
-    const std::wstring skipped_frame_marker) {
+void StackFrame::DumpUsingSettingsFormat(Stream *strm, bool show_unique,
+                                         const std::wstring frame_marker) {
   if (strm == nullptr)
     return;
 
@@ -1958,10 +1955,9 @@ void StackFrame::DumpUsingSettingsFormat(
     }
   }
 
-  std::string skipped_frame_delimiter_utf8;
-  llvm::convertWideToUTF8(skipped_frame_marker, skipped_frame_delimiter_utf8);
-  if (!DumpUsingFormat(*strm, frame_format, frame_marker,
-                       skipped_frame_delimiter_utf8)) {
+  std::string frame_marker_utf8;
+  llvm::convertWideToUTF8(frame_marker, frame_marker_utf8);
+  if (!DumpUsingFormat(*strm, frame_format, frame_marker_utf8)) {
     Dump(strm, true, false);
     strm->EOL();
   }
@@ -2042,12 +2038,10 @@ bool StackFrame::HasCachedData() const {
 }
 
 bool StackFrame::GetStatus(Stream &strm, bool show_frame_info, bool show_source,
-                           bool show_unique, const char *frame_marker,
-                           const std::wstring skipped_frame_marker) {
+                           bool show_unique, const std::wstring frame_marker) {
   if (show_frame_info) {
     strm.Indent();
-    DumpUsingSettingsFormat(&strm, show_unique, frame_marker,
-                            skipped_frame_marker);
+    DumpUsingSettingsFormat(&strm, show_unique, frame_marker);
   }
 
   if (show_source) {
diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp
index 80f77e2bcee16..97374ee7123f0 100644
--- a/lldb/source/Target/StackFrameList.cpp
+++ b/lldb/source/Target/StackFrameList.cpp
@@ -23,6 +23,7 @@
 #include "lldb/Target/Target.h"
 #include "lldb/Target/Thread.h"
 #include "lldb/Target/Unwind.h"
+#include "lldb/Utility/DiagnosticsRendering.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Log.h"
 #include "llvm/ADT/SmallPtrSet.h"
@@ -897,11 +898,25 @@ bool StackFrameList::IsPreviousFrameHidden(lldb_private::StackFrame &frame) {
   return frame_sp->IsHidden();
 }
 
+std::wstring StackFrameList::FrameMarker(lldb::StackFrameSP frame_sp,
+                                         lldb::StackFrameSP selected_frame_sp) {
+  if (frame_sp == selected_frame_sp) {
+    return TerminalSupportsUnicode() ? L" * " : L"* ";
+  } else if (!TerminalSupportsUnicode()) {
+    return L"  ";
+  } else if (IsPreviousFrameHidden(*frame_sp)) {
+    return L" ﹉";
+  } else if (IsNextFrameHidden(*frame_sp)) {
+    return L" ﹍";
+  }
+  return L"  ";
+}
+
 size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
                                  uint32_t num_frames, bool show_frame_info,
                                  uint32_t num_frames_with_source,
                                  bool show_unique, bool show_hidden,
-                                 const char *selected_frame_marker) {
+                                 bool show_selected_frame) {
   size_t num_frames_displayed = 0;
 
   if (num_frames == 0)
@@ -919,30 +934,17 @@ size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
 
   StackFrameSP selected_frame_sp =
       m_thread.GetSelectedFrame(DoNoSelectMostRelevantFrame);
-  const char *unselected_marker = nullptr;
   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 = nullptr;
+  std::wstring marker;
   for (frame_idx = first_frame; frame_idx < last_frame; ++frame_idx) {
     frame_sp = GetFrameAtIndex(frame_idx);
     if (!frame_sp)
       break;
 
-    if (selected_frame_marker != nullptr) {
-      if (frame_sp == selected_frame_sp)
-        marker = selected_frame_marker;
-      else
-        marker = unselected_marker;
-    }
-    std::wstring skipped_frame_marker = L" ";
-    if (IsPreviousFrameHidden(*frame_sp))
-      skipped_frame_marker = L"﹈";
-    else if (IsNextFrameHidden(*frame_sp))
-      skipped_frame_marker = L"﹇";
+    if (show_selected_frame)
+      marker = FrameMarker(frame_sp, selected_frame_sp);
+    else
+      marker = FrameMarker(frame_sp, nullptr);
 
     // Hide uninteresting frames unless it's the selected frame.
     if (!show_hidden && frame_sp != selected_frame_sp && frame_sp->IsHidden())
@@ -958,7 +960,7 @@ size_t StackFrameList::GetStatus(Stream &strm, uint32_t first_frame,
 
     if (!frame_sp->GetStatus(strm, show_frame_info,
                              num_frames_with_source > (first_frame - frame_idx),
-                             show_unique, marker, skipped_frame_marker))
+                             show_unique, marker))
       break;
     ++num_frames_displayed;
   }
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 8c3e19725f8cb..e1b3fde77c40e 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -1817,16 +1817,16 @@ size_t Thread::GetStatus(Stream &strm, uint32_t start_frame,
 
     const bool show_frame_info = true;
     const bool show_frame_unique = only_stacks;
-    const char *selected_frame_marker = nullptr;
+    bool show_selected_frame = false;
     if (num_frames == 1 || only_stacks ||
         (GetID() != GetProcess()->GetThreadList().GetSelectedThread()->GetID()))
       strm.IndentMore();
     else
-      selected_frame_marker = "* ";
+      show_selected_frame = true;
 
     num_frames_shown = GetStackFrameList()->GetStatus(
         strm, start_frame, num_frames, show_frame_info, num_frames_with_source,
-        show_frame_unique, show_hidden, selected_frame_marker);
+        show_frame_unique, show_hidden, show_selected_frame);
     if (num_frames == 1)
       strm.IndentLess();
     strm.IndentLess();
diff --git a/lldb/source/Utility/DiagnosticsRendering.cpp b/lldb/source/Utility/DiagnosticsRendering.cpp
index 8c21e661ce764..6ee0e1b3e04f5 100644
--- a/lldb/source/Utility/DiagnosticsRendering.cpp
+++ b/lldb/source/Utility/DiagnosticsRendering.cpp
@@ -102,7 +102,7 @@ void RenderDiagnosticDetails(Stream &stream,
   // characters.  In the future it might make sense to move this into
   // Host so it can be customized for a specific platform.
   llvm::StringRef cursor, underline, vbar, joint, hbar, spacer;
-  if (stream.AsRawOstream().colors_enabled()) {
+  if (TerminalSupportsUnicode()) {
     cursor = "˄";
     underline = "˜";
     vbar = "│";
@@ -232,4 +232,19 @@ void RenderDiagnosticDetails(Stream &stream,
     }
 }
 
+bool TerminalSupportsUnicode() {
+  static std::optional<bool> result;
+  if (result)
+    return result.value();
+#ifndef _WIN32
+  if (const char *lang_var = std::getenv("LANG"))
+    result = std::string(lang_var).find("UTF-8");
+  else
+    result = false;
+#else
+  result = std::getenv("WT_SESSION") != nullptr;
+#endif
+  return result.value();
+}
+
 } // namespace lldb_private

>From f582d45c6a390e8cbc7c3b3410694ca6de039f14 Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Tue, 18 Nov 2025 19:38:55 +0100
Subject: [PATCH 3/3] remove unused comments

---
 lldb/include/lldb/Target/StackFrame.h     | 16 ++--------------
 lldb/include/lldb/Target/StackFrameList.h |  6 ++----
 lldb/source/Target/StackFrame.cpp         |  4 ++--
 3 files changed, 6 insertions(+), 20 deletions(-)

diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index 7cae4d6e69972..2f48d8fb74751 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -335,10 +335,6 @@ class StackFrame : public ExecutionContextScope,
   /// \param[in] frame_marker
   ///   Optional string that will be prepended to the frame output description.
   ///
-  /// \param[in] skipped_frame_marker
-  ///   Optional string that will be prepended to the first or last non skipped
-  ///   frame output description.
-  ///
   /// \return
   ///   \b true if and only if dumping with the given \p format worked.
   bool DumpUsingFormat(Stream &strm,
@@ -357,12 +353,8 @@ class StackFrame : public ExecutionContextScope,
   ///
   /// \param [in] frame_marker
   ///   Optional string that will be prepended to the frame output description.
-  ///
-  /// \param[in] skipped_frame_marker
-  ///   Optional string that will be prepended to the first or last non skipped
-  ///   frame output description.
   void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
-                               const std::wstring frame_marker = L"");
+                               const std::wstring &frame_marker = L"");
 
   /// Print a description for this frame using a default format.
   ///
@@ -395,15 +387,11 @@ class StackFrame : public ExecutionContextScope,
   /// \param[in] frame_marker
   ///   Passed to DumpUsingSettingsFormat() for the frame info printing.
   ///
-  ///
-  /// \param[in] skipped_frame_marker
-  ///   Optional string that will be prepended to the first or last non skipped
-  ///   frame output description.
   /// \return
   ///   Returns true if successful.
   bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
                  bool show_unique = false,
-                 const std::wstring skipped_frame_marker = L"");
+                 const std::wstring &frame_marker = L"");
 
   /// Query whether this frame is a concrete frame on the call stack, or if it
   /// is an inlined frame derived from the debug information and presented by
diff --git a/lldb/include/lldb/Target/StackFrameList.h b/lldb/include/lldb/Target/StackFrameList.h
index 4587098c8902f..b301157cfb92e 100644
--- a/lldb/include/lldb/Target/StackFrameList.h
+++ b/lldb/include/lldb/Target/StackFrameList.h
@@ -49,12 +49,10 @@ class StackFrameList {
   /// Resets the selected frame index of this object.
   void ClearSelectedFrameIndex();
 
-  /// Return \code true if the next frame is hidden. False otherwise or if it's
-  /// the last frame.
+  /// Return \code true if the next frame is hidden.
   bool IsNextFrameHidden(lldb_private::StackFrame &frame);
 
-  /// Return \code true if the previous frame is hidden. False otherwise or if
-  /// it's the first frame.
+  /// Return \code true if the previous frame is hidden.
   bool IsPreviousFrameHidden(lldb_private::StackFrame &frame);
 
   std::wstring FrameMarker(lldb::StackFrameSP frame_sp,
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index c47a6e2dc444c..44d712bec0f07 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1936,7 +1936,7 @@ bool StackFrame::DumpUsingFormat(Stream &strm,
 }
 
 void StackFrame::DumpUsingSettingsFormat(Stream *strm, bool show_unique,
-                                         const std::wstring frame_marker) {
+                                         const std::wstring &frame_marker) {
   if (strm == nullptr)
     return;
 
@@ -2038,7 +2038,7 @@ bool StackFrame::HasCachedData() const {
 }
 
 bool StackFrame::GetStatus(Stream &strm, bool show_frame_info, bool show_source,
-                           bool show_unique, const std::wstring frame_marker) {
+                           bool show_unique, const std::wstring &frame_marker) {
   if (show_frame_info) {
     strm.Indent();
     DumpUsingSettingsFormat(&strm, show_unique, frame_marker);



More information about the lldb-commits mailing list