-
Notifications
You must be signed in to change notification settings - Fork 14.6k
[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
Conversation
…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".
@llvm/pr-subscribers-lldb Author: Michael Buch (Michael137) ChangesThere is currently no way to prevent Full diff: https://github.com/llvm/llvm-project/pull/148235.diff 2 Files Affected:
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()'
|
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 |
…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
There is currently no way to prevent
${function.name-with-args}
from using theplugin.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 soplugin.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".