-
Notifications
You must be signed in to change notification settings - Fork 16.1k
Revert "[lldb] add a marker before hidden frames (#167550)" #176747
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
charles-zablit
merged 1 commit into
llvm:main
from
charles-zablit:charles-zablit/revert-hidden-frames
Jan 19, 2026
Merged
Revert "[lldb] add a marker before hidden frames (#167550)" #176747
charles-zablit
merged 1 commit into
llvm:main
from
charles-zablit:charles-zablit/revert-hidden-frames
Jan 19, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Member
|
@llvm/pr-subscribers-lldb Author: Charles Zablit (charles-zablit) ChangesThis patch reverts e43331f which was merged in #167550, due to build failures. Full diff: https://github.com/llvm/llvm-project/pull/176747.diff 12 Files Affected:
diff --git a/lldb/include/lldb/Core/Debugger.h b/lldb/include/lldb/Core/Debugger.h
index dadccaeb5d17b..a39413c06340c 100644
--- a/lldb/include/lldb/Core/Debugger.h
+++ b/lldb/include/lldb/Core/Debugger.h
@@ -340,8 +340,6 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
bool SetUseSourceCache(bool use_source_cache);
- bool GetMarkHiddenFrames() const;
-
bool GetHighlightSource() const;
lldb::StopShowColumn GetStopShowColumn() const;
diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index 0d07515bf0f13..46922448d6e59 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -363,7 +363,7 @@ class StackFrame : public ExecutionContextScope,
/// \param [in] frame_marker
/// Optional string that will be prepended to the frame output description.
virtual void DumpUsingSettingsFormat(Stream *strm, bool show_unique = false,
- const llvm::StringRef frame_marker = "");
+ const char *frame_marker = nullptr);
/// Print a description for this frame using a default format.
///
@@ -400,7 +400,7 @@ class StackFrame : public ExecutionContextScope,
/// Returns true if successful.
virtual bool GetStatus(Stream &strm, bool show_frame_info, bool show_source,
bool show_unique = false,
- const llvm::StringRef frame_marker = "");
+ const char *frame_marker = nullptr);
/// 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 c54df941e3aa9..c096fe3ff61a0 100644
--- a/lldb/include/lldb/Target/StackFrameList.h
+++ b/lldb/include/lldb/Target/StackFrameList.h
@@ -49,22 +49,6 @@ class StackFrameList : public std::enable_shared_from_this<StackFrameList> {
/// Resets the selected frame index of this object.
void ClearSelectedFrameIndex();
- /// Returns \p true if the next frame is hidden.
- bool IsNextFrameHidden(lldb_private::StackFrame &frame);
-
- /// Returns \p true if the previous frame is hidden.
- bool IsPreviousFrameHidden(lldb_private::StackFrame &frame);
-
- /// Returns the stack frame marker depending on if \p frame_sp:
- /// @li is selected: *
- /// @li is the first non hidden frame: ﹍
- /// @li is the last non hidden frame: ﹉
- ///
- /// If the terminal does not support Unicode rendering, the hidden frame
- /// markers are replaced with whitespaces.
- std::string 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
@@ -112,8 +96,7 @@ class StackFrameList : public std::enable_shared_from_this<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,
- bool show_hidden_marker = true,
- bool show_selected_frame = false);
+ const char *frame_marker = nullptr);
/// Returns whether we have currently fetched all the frames of a stack.
bool WereAllFramesFetched() const;
diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index d7c8ed1da00e0..a7df9fe63badc 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -439,35 +439,6 @@ def impl(func):
return impl
-def unicode_test(func):
- """Decorate the item as a test which requires Unicode to be enabled.
-
- lldb checks the value of the `LANG` environment variable for the substring "utf-8"
- to determine if the terminal supports Unicode (except on Windows, were we assume
- it's always supported).
- This decorator sets LANG to `utf-8` before running the test and resets it to its
- previous value afterwards.
- """
-
- def unicode_wrapped(*args, **kwargs):
- import os
-
- previous_lang = os.environ.get("LANG", None)
- os.environ["LANG"] = "en_US.UTF-8"
- try:
- func(*args, **kwargs)
- except Exception as err:
- raise err
- finally:
- # Reset the value, whether the test failed or not.
- if previous_lang is not None:
- os.environ["LANG"] = previous_lang
- else:
- del os.environ["LANG"]
-
- return unicode_wrapped
-
-
def no_debug_info_test(func):
"""Decorate the item as a test what don't use any debug info. If this annotation is specified
then the test runner won't generate a separate test for each debug info format."""
diff --git a/lldb/source/Core/CoreProperties.td b/lldb/source/Core/CoreProperties.td
index f39973fdc7a10..99bb5a3fc6f73 100644
--- a/lldb/source/Core/CoreProperties.td
+++ b/lldb/source/Core/CoreProperties.td
@@ -114,10 +114,6 @@ let Definition = "debugger" in {
Global,
DefaultTrue,
Desc<"If true, LLDB will highlight the displayed source code.">;
- def MarkHiddenFrames: Property<"mark-hidden-frames", "Boolean">,
- Global,
- DefaultTrue,
- Desc<"If true, LLDB will add a marker to delimit hidden frames in backtraces.">;
def StopShowColumn: Property<"stop-show-column", "Enum">,
DefaultEnumValue<"eStopShowColumnAnsiOrCaret">,
EnumValues<"OptionEnumValues(s_stop_show_column_values)">,
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp
index 65acaa5fb9f4d..669dd90cd324f 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -584,13 +584,6 @@ bool Debugger::SetUseSourceCache(bool b) {
}
return ret;
}
-
-bool Debugger::GetMarkHiddenFrames() const {
- const uint32_t idx = ePropertyMarkHiddenFrames;
- return GetPropertyAtIndexAs<bool>(
- idx, g_debugger_properties[idx].default_uint_value != 0);
-}
-
bool Debugger::GetHighlightSource() const {
const uint32_t idx = ePropertyHighlightSource;
return GetPropertyAtIndexAs<bool>(
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 3ef96a46517c9..340607e14abed 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1945,7 +1945,7 @@ bool StackFrame::DumpUsingFormat(Stream &strm,
}
void StackFrame::DumpUsingSettingsFormat(Stream *strm, bool show_unique,
- const llvm::StringRef frame_marker) {
+ const char *frame_marker) {
if (strm == nullptr)
return;
@@ -2044,8 +2044,7 @@ bool StackFrame::HasCachedData() const {
}
bool StackFrame::GetStatus(Stream &strm, bool show_frame_info, bool show_source,
- bool show_unique,
- const llvm::StringRef frame_marker) {
+ bool show_unique, const char *frame_marker) {
if (show_frame_info) {
strm.Indent();
DumpUsingSettingsFormat(&strm, show_unique, frame_marker);
diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp
index e0c6aa0542f4d..e6112f8f3264b 100644
--- a/lldb/source/Target/StackFrameList.cpp
+++ b/lldb/source/Target/StackFrameList.cpp
@@ -27,7 +27,6 @@
#include "lldb/Utility/LLDBLog.h"
#include "lldb/Utility/Log.h"
#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/Support/ConvertUTF.h"
#include <memory>
@@ -930,43 +929,11 @@ 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();
-}
-
-std::string StackFrameList::FrameMarker(lldb::StackFrameSP frame_sp,
- lldb::StackFrameSP selected_frame_sp) {
- if (frame_sp == selected_frame_sp)
- return Terminal::SupportsUnicode() ? u8" * " : u8"* ";
- else if (!Terminal::SupportsUnicode())
- return u8" ";
- else if (IsPreviousFrameHidden(*frame_sp))
- return u8"﹉ ";
- else if (IsNextFrameHidden(*frame_sp))
- return u8"﹍ ";
- return u8" ";
-}
-
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,
- bool show_hidden_marker,
- bool show_selected_frame) {
+ const char *selected_frame_marker) {
size_t num_frames_displayed = 0;
if (num_frames == 0)
@@ -984,17 +951,25 @@ 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;
- std::string marker;
+ 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;
for (frame_idx = first_frame; frame_idx < last_frame; ++frame_idx) {
frame_sp = GetFrameAtIndex(frame_idx);
if (!frame_sp)
break;
- if (show_selected_frame)
- marker = FrameMarker(frame_sp, selected_frame_sp);
- else
- marker = FrameMarker(frame_sp, nullptr);
+ if (selected_frame_marker != nullptr) {
+ if (frame_sp == selected_frame_sp)
+ marker = selected_frame_marker;
+ else
+ marker = unselected_marker;
+ }
// Hide uninteresting frames unless it's the selected frame.
if (!show_hidden && frame_sp != selected_frame_sp && frame_sp->IsHidden())
@@ -1008,6 +983,7 @@ 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))
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 1e3c7867eeca1..70d8650662348 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -1888,9 +1888,9 @@ size_t Thread::GetStatus(Stream &strm, uint32_t start_frame,
uint32_t num_frames, uint32_t num_frames_with_source,
bool stop_format, bool show_hidden, bool only_stacks) {
- ExecutionContext exe_ctx(shared_from_this());
- Target *target = exe_ctx.GetTargetPtr();
if (!only_stacks) {
+ ExecutionContext exe_ctx(shared_from_this());
+ Target *target = exe_ctx.GetTargetPtr();
Process *process = exe_ctx.GetProcessPtr();
strm.Indent();
bool is_selected = false;
@@ -1924,19 +1924,16 @@ size_t Thread::GetStatus(Stream &strm, uint32_t start_frame,
const bool show_frame_info = true;
const bool show_frame_unique = only_stacks;
- bool show_selected_frame = false;
+ const char *selected_frame_marker = nullptr;
if (num_frames == 1 || only_stacks ||
(GetID() != GetProcess()->GetThreadList().GetSelectedThread()->GetID()))
strm.IndentMore();
else
- show_selected_frame = true;
+ selected_frame_marker = "* ";
- bool show_hidden_marker =
- target && target->GetDebugger().GetMarkHiddenFrames();
num_frames_shown = GetStackFrameList()->GetStatus(
strm, start_frame, num_frames, show_frame_info, num_frames_with_source,
- show_frame_unique, show_hidden, show_hidden_marker,
- show_selected_frame);
+ show_frame_unique, show_hidden, selected_frame_marker);
if (num_frames == 1)
strm.IndentLess();
strm.IndentLess();
@@ -2036,13 +2033,9 @@ size_t Thread::GetStackFrameStatus(Stream &strm, uint32_t first_frame,
uint32_t num_frames, bool show_frame_info,
uint32_t num_frames_with_source,
bool show_hidden) {
- ExecutionContext exe_ctx(shared_from_this());
- Target *target = exe_ctx.GetTargetPtr();
- bool show_hidden_marker =
- target && target->GetDebugger().GetMarkHiddenFrames();
- return GetStackFrameList()->GetStatus(
- strm, first_frame, num_frames, show_frame_info, num_frames_with_source,
- /*show_unique*/ false, show_hidden, show_hidden_marker);
+ return GetStackFrameList()->GetStatus(strm, first_frame, num_frames,
+ show_frame_info, num_frames_with_source,
+ /*show_unique*/ false, show_hidden);
}
Unwind &Thread::GetUnwinder() {
diff --git a/lldb/test/API/terminal/hidden_frame_markers/Makefile b/lldb/test/API/terminal/hidden_frame_markers/Makefile
deleted file mode 100644
index 99998b20bcb05..0000000000000
--- a/lldb/test/API/terminal/hidden_frame_markers/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-CXX_SOURCES := main.cpp
-
-include Makefile.rules
diff --git a/lldb/test/API/terminal/hidden_frame_markers/TestHiddenFrameMarkers.py b/lldb/test/API/terminal/hidden_frame_markers/TestHiddenFrameMarkers.py
deleted file mode 100644
index 178d97fce17c2..0000000000000
--- a/lldb/test/API/terminal/hidden_frame_markers/TestHiddenFrameMarkers.py
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-Test that hidden frames are delimited with markers.
-"""
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class HiddenFrameMarkerTest(TestBase):
- @unicode_test
- def test_hidden_frame_markers(self):
- """Test that hidden frame markers are rendered in backtraces"""
- self.build()
- lldbutil.run_to_source_breakpoint(
- self, "// break here", lldb.SBFileSpec("main.cpp")
- )
- self.expect(
- "bt",
- substrs=[
- " * frame #0:",
- " ﹍ frame #1:",
- " ﹉ frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
-
- self.runCmd("f 1")
- self.expect(
- "bt",
- substrs=[
- " frame #0:",
- " * frame #1:",
- " ﹉ frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
-
- self.runCmd("f 7")
- self.expect(
- "bt",
- substrs=[
- " frame #0:",
- " ﹍ frame #1:",
- " * frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
-
- def test_hidden_frame_markers(self):
- """
- Test that hidden frame markers are not rendered in backtraces when
- mark-hidden-frames is set to false
- """
- self.build()
- self.runCmd("settings set mark-hidden-frames 0")
- lldbutil.run_to_source_breakpoint(
- self, "// break here", lldb.SBFileSpec("main.cpp")
- )
- self.expect(
- "bt",
- substrs=[
- " * frame #0:",
- " frame #1:",
- " frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
-
- self.runCmd("f 1")
- self.expect(
- "bt",
- substrs=[
- " frame #0:",
- " * frame #1:",
- " frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
-
- self.runCmd("f 7")
- self.expect(
- "bt",
- substrs=[
- " frame #0:",
- " frame #1:",
- " * frame #7:",
- " frame #8:",
- " frame #9:",
- ],
- )
diff --git a/lldb/test/API/terminal/hidden_frame_markers/main.cpp b/lldb/test/API/terminal/hidden_frame_markers/main.cpp
deleted file mode 100644
index c0b7e0884538a..0000000000000
--- a/lldb/test/API/terminal/hidden_frame_markers/main.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <functional>
-#include <iostream>
-
-static void target() {
- int a = 0; // break here
-}
-
-int main() {
- std::function<void()> fn = [] { target(); };
- fn();
- return 0;
-}
|
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
This reverts commit e43331f.
4fa8011 to
0d9e076
Compare
BStott6
pushed a commit
to BStott6/llvm-project
that referenced
this pull request
Jan 22, 2026
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch reverts e43331f which was merged in #167550, due to build failures.