Skip to content

[lldb][Format] Fall back to old function.name-with-args if language frame format is emtpy #148235

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 1 commit into from
Jul 12, 2025

Conversation

Michael137
Copy link
Member

There is currently no way to prevent ${function.name-with-args} from using the plugin.cplusplus.display.function-name-format setting. Even if the setting is set to an empty string. As a way to disable formatting by language plugin, this patch makes it so plugin.cplusplus.display.function-name-format falls back to the old way of printing ${function.name-with-args}. Even if we didn't want to add a fallback, making the setting an empty string shouldn't really "succeed".

…ame format is emtpy

There is currently no way to prevent `${function.name-with-args}` from
using the `plugin.cplusplus.display.function-name-format` setting. Even if the
setting is set to an empty string. As a way to disable formatting by
language plugin, this patch makes it so `plugin.cplusplus.display.function-name-format`
falls back to the old way of printing `${function.name-with-args}`. Even
if we didn't want to add a fallback, making the setting an empty string
shouldn't really "succeed".
@llvmbot
Copy link
Member

llvmbot commented Jul 11, 2025

@llvm/pr-subscribers-lldb

Author: Michael Buch (Michael137)

Changes

There is currently no way to prevent ${function.name-with-args} from using the plugin.cplusplus.display.function-name-format setting. Even if the setting is set to an empty string. As a way to disable formatting by language plugin, this patch makes it so plugin.cplusplus.display.function-name-format falls back to the old way of printing ${function.name-with-args}. Even if we didn't want to add a fallback, making the setting an empty string shouldn't really "succeed".


Full diff: https://github.com/llvm/llvm-project/pull/148235.diff

2 Files Affected:

  • (modified) lldb/source/Core/FormatEntity.cpp (+3-1)
  • (added) lldb/test/Shell/Settings/TestCxxFrameFormatEmpty.test (+32)
diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp
index ca389bc88cf79..370b51e726ec2 100644
--- a/lldb/source/Core/FormatEntity.cpp
+++ b/lldb/source/Core/FormatEntity.cpp
@@ -1280,7 +1280,9 @@ static bool FormatFunctionNameForLanguage(Stream &s,
     return false;
 
   FormatEntity::Entry format = language_plugin->GetFunctionNameFormat();
-  if (!format)
+
+  // Bail on invalid or empty format.
+  if (!format || format == FormatEntity::Entry(Entry::Type::Root))
     return false;
 
   StreamString name_stream;
diff --git a/lldb/test/Shell/Settings/TestCxxFrameFormatEmpty.test b/lldb/test/Shell/Settings/TestCxxFrameFormatEmpty.test
new file mode 100644
index 0000000000000..0a6d2723ded34
--- /dev/null
+++ b/lldb/test/Shell/Settings/TestCxxFrameFormatEmpty.test
@@ -0,0 +1,32 @@
+# XFAIL: target-windows
+
+# Test that setting plugin.cplusplus.display.function-name-format
+# to an empty string disables the "format by language" part of
+# ${function.name-with-args}.
+
+# RUN: split-file %s %t
+# RUN: %clang_host -g -gdwarf %t/main.cpp -o %t.out
+# RUN: %lldb -x -b -s %t/commands.input %t.out -o exit 2>&1 \
+# RUN:       | FileCheck %s
+
+#--- main.cpp
+namespace ns::ns2 {
+void custom(int x) {}
+void bar() { custom(5); }
+}
+
+int main(int argc, char const *argv[]) {
+    ns::ns2::bar();
+    return 0;
+}
+
+#--- commands.input
+settings set plugin.cplusplus.display.function-name-format ""
+settings set -f frame-format "custom-frame '${function.name-with-args}'\n"
+break set -l 2 -f main.cpp
+
+run
+bt
+
+# CHECK: custom-frame 'ns::ns2::custom(x=5)'
+# CHECK: custom-frame 'ns::ns2::bar()'

@Michael137 Michael137 changed the title [lldb][Format] Fallback to old function-name-with args if language frame format is emtpy [lldb][Format] Fall back to old function-name-with args if language frame format is emtpy Jul 11, 2025
@Michael137 Michael137 changed the title [lldb][Format] Fall back to old function-name-with args if language frame format is emtpy [lldb][Format] Fall back to old function.name-with-args if language frame format is emtpy Jul 11, 2025
@charles-zablit
Copy link
Contributor

Is it a reasonable use case to want to not print anything? If not, then I think this is a valid way of deactivating the plugin formatting.

@Michael137
Copy link
Member Author

Is it a reasonable use case to want to not print anything? If not, then I think this is a valid way of deactivating the plugin formatting.

There are better ways of not printing a function name in the frame. E.g., overriding the frame-format setting

Michael137 added a commit to swiftlang/llvm-project that referenced this pull request Jul 11, 2025
…rame format is emtpy

There is currently no way to prevent `${function.name-with-args}` from using the `plugin.cplusplus.display.function-name-format` setting. Even if the setting is set to an empty string. As a way to disable formatting by language plugin, this patch makes it so `plugin.cplusplus.display.function-name-format` falls back to the old way of printing `${function.name-with-args}`. Even if we didn't want to add a fallback, making the setting an empty string shouldn't really "succeed".

Cherry-picked from llvm#148235
@Michael137 Michael137 merged commit 8afab75 into llvm:main Jul 12, 2025
11 checks passed
@Michael137 Michael137 deleted the lldb/empty-frame-format branch July 12, 2025 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants