Skip to content

[lldb] Change the statusline format to print "no target" #139021

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
merged 2 commits into from
May 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lldb/source/Core/CoreProperties.td
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ let Definition = "debugger" in {
: Property<"statusline-format", "FormatEntity">,
Global,
DefaultStringValue<
"${ansi.negative}{${target.file.basename}}{ "
"${ansi.negative}{${target.file.basename}|no target}{ "
"${separator}${line.file.basename}:${line.number}:${line.column}}{ "
"${separator}${thread.stop-reason}}{ "
"${separator}{${progress.count} }${progress.message}}">,
Expand Down
61 changes: 33 additions & 28 deletions lldb/test/API/functionalities/statusline/TestStatusline.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,17 @@
from lldbsuite.test.lldbpexpect import PExpectTest


# PExpect uses many timeouts internally and doesn't play well
# under ASAN on a loaded machine..
@skipIfAsan
class TestStatusline(PExpectTest):
# Change this value to something smaller to make debugging this test less
# tedious.
TIMEOUT = 60

TERMINAL_HEIGHT = 10
TERMINAL_WIDTH = 60

def do_setup(self):
# Create a target and run to a breakpoint.
exe = self.getBuildArtifact("a.out")
Expand All @@ -15,36 +25,34 @@ def do_setup(self):
)
self.expect('breakpoint set -p "Break here"', substrs=["Breakpoint 1"])
self.expect("run", substrs=["stop reason"])
self.resize()

def resize(self):
# Change the terminal dimensions. When we launch the tests, we reset
# all the settings, leaving the terminal dimensions unset.
self.child.setwinsize(self.TERMINAL_HEIGHT, self.TERMINAL_WIDTH)

# PExpect uses many timeouts internally and doesn't play well
# under ASAN on a loaded machine..
@skipIfAsan
def test(self):
"""Basic test for the statusline."""
self.build()
self.launch()
self.launch(timeout=self.TIMEOUT)
self.do_setup()

# Change the terminal dimensions.
terminal_height = 10
terminal_width = 60
self.child.setwinsize(terminal_height, terminal_width)

# Enable the statusline and check for the control character and that we
# can see the target, the location and the stop reason.
self.expect('set set separator "| "')
self.expect(
"set set show-statusline true",
[
"\x1b[0;{}r".format(terminal_height - 1),
"\x1b[0;{}r".format(self.TERMINAL_HEIGHT - 1),
"a.out | main.c:2:11 | breakpoint 1.1 ",
],
)

# Change the terminal dimensions and make sure it's reflected immediately.
self.child.setwinsize(terminal_height, 25)
self.child.setwinsize(self.TERMINAL_HEIGHT, 25)
self.child.expect(re.escape("a.out | main.c:2:11 | bre"))
self.child.setwinsize(terminal_height, terminal_width)
self.child.setwinsize(self.TERMINAL_HEIGHT, self.TERMINAL_WIDTH)

# Change the separator.
self.expect('set set separator "S "', ["a.out S main.c:2:11"])
Expand All @@ -58,23 +66,15 @@ def test(self):

# Hide the statusline and check or the control character.
self.expect(
"set set show-statusline false", ["\x1b[0;{}r".format(terminal_height)]
"set set show-statusline false", ["\x1b[0;{}r".format(self.TERMINAL_HEIGHT)]
)

# PExpect uses many timeouts internally and doesn't play well
# under ASAN on a loaded machine..
@skipIfAsan
def test_no_color(self):
"""Basic test for the statusline with colors disabled."""
self.build()
self.launch(use_colors=False)
self.launch(use_colors=False, timeout=self.TIMEOUT)
self.do_setup()

# Change the terminal dimensions.
terminal_height = 10
terminal_width = 60
self.child.setwinsize(terminal_height, terminal_width)

# Enable the statusline and check for the "reverse video" control character.
self.expect(
"set set show-statusline true",
Expand All @@ -87,15 +87,20 @@ def test_deadlock(self):
"""Regression test for lock inversion between the statusline mutex and
the output mutex."""
self.build()
self.launch(extra_args=["-o", "settings set use-color false"])
self.launch(
extra_args=["-o", "settings set use-color false"], timeout=self.TIMEOUT
)
self.child.expect("(lldb)")

# Change the terminal dimensions.
terminal_height = 10
terminal_width = 60
self.child.setwinsize(terminal_height, terminal_width)
self.resize()

exe = self.getBuildArtifact("a.out")

self.expect("file {}".format(exe), ["Current executable"])
self.expect("help", ["Debugger commands"])

def test_no_target(self):
"""Test that we print "no target" when launched without a target."""
self.launch(timeout=self.TIMEOUT)
self.resize()

self.expect("set set show-statusline true", ["no target"])
Loading