https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/139021
>From fcd590a31f7b490f5fbc5996d9c5f2836ff4e7ee Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Wed, 7 May 2025 21:20:47 -0700 Subject: [PATCH 1/2] [lldb] Change the statusline format to print "no target" Change the default statusline format to print "no target" when lldb is launched without a target. Currently, the statusline is empty, which looks rather odd. --- lldb/source/Core/CoreProperties.td | 2 +- .../statusline/TestStatusline.py | 62 ++++++++++--------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/lldb/source/Core/CoreProperties.td b/lldb/source/Core/CoreProperties.td index 2498841b47d9f..78988ce5b732f 100644 --- a/lldb/source/Core/CoreProperties.td +++ b/lldb/source/Core/CoreProperties.td @@ -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}}">, diff --git a/lldb/test/API/functionalities/statusline/TestStatusline.py b/lldb/test/API/functionalities/statusline/TestStatusline.py index da6b4e7c8f320..f00413e878d26 100644 --- a/lldb/test/API/functionalities/statusline/TestStatusline.py +++ b/lldb/test/API/functionalities/statusline/TestStatusline.py @@ -6,7 +6,18 @@ 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") @@ -15,36 +26,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"]) @@ -58,23 +67,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", @@ -87,15 +88,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"]) >From 547b9a3e41be42cf101614787c95c1137705ec2c Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Wed, 7 May 2025 22:24:36 -0700 Subject: [PATCH 2/2] Formatting --- lldb/test/API/functionalities/statusline/TestStatusline.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lldb/test/API/functionalities/statusline/TestStatusline.py b/lldb/test/API/functionalities/statusline/TestStatusline.py index f00413e878d26..53ac7432f4ba1 100644 --- a/lldb/test/API/functionalities/statusline/TestStatusline.py +++ b/lldb/test/API/functionalities/statusline/TestStatusline.py @@ -10,7 +10,6 @@ # 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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits