[Lldb-commits] [lldb] [lldb] add plugin names to process save-core error output. (PR #143126)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Fri Jun 6 05:29:33 PDT 2025
https://github.com/da-viper created https://github.com/llvm/llvm-project/pull/143126
continuation of [#142684](https://github.com/llvm/llvm-project/pull/142684) to show plugin names.
>From issue [#14258](https://github.com/llvm/llvm-project/issues/142581)
>From 95c61d6a917060d7b3a2bc554575eb6a1086ed6e Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Fri, 6 Jun 2025 13:15:41 +0100
Subject: [PATCH] [lldb] add plugin names to process save-core error output.
---
lldb/include/lldb/Core/PluginManager.h | 2 ++
lldb/source/Core/PluginManager.cpp | 10 ++++++++++
lldb/source/Symbol/SaveCoreOptions.cpp | 22 ++++++++++++++++++++--
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index e2f709ecd2ff7..7996dc3fdf3f3 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -212,6 +212,8 @@ class PluginManager {
static Status SaveCore(const lldb::ProcessSP &process_sp,
lldb_private::SaveCoreOptions &core_options);
+ static llvm::SmallVector<llvm::StringRef> GetSaveCorePluginNames();
+
// ObjectContainer
static bool RegisterPlugin(
llvm::StringRef name, llvm::StringRef description,
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp
index de815e6308838..d02e3030081dc 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -800,6 +800,16 @@ Status PluginManager::SaveCore(const lldb::ProcessSP &process_sp,
return error;
}
+llvm::SmallVector<llvm::StringRef> PluginManager::GetSaveCorePluginNames() {
+ llvm::SmallVector<llvm::StringRef> plugin_names;
+ auto instances = GetObjectFileInstances().GetSnapshot();
+ for (auto &instance : instances) {
+ if (instance.save_core)
+ plugin_names.emplace_back(instance.name);
+ }
+ return plugin_names;
+}
+
#pragma mark ObjectContainer
struct ObjectContainerInstance
diff --git a/lldb/source/Symbol/SaveCoreOptions.cpp b/lldb/source/Symbol/SaveCoreOptions.cpp
index d884b00a47b00..c1c85571c8a78 100644
--- a/lldb/source/Symbol/SaveCoreOptions.cpp
+++ b/lldb/source/Symbol/SaveCoreOptions.cpp
@@ -22,8 +22,26 @@ Status SaveCoreOptions::SetPluginName(const char *name) {
}
if (!PluginManager::IsRegisteredObjectFilePluginName(name)) {
- return Status::FromErrorStringWithFormat(
- "plugin name '%s' is not a valid ObjectFile plugin name", name);
+ StreamString stream;
+ stream.Printf("plugin name '%s' is not a valid ObjectFile plugin name.",
+ name);
+
+ llvm::SmallVector<llvm::StringRef> plugin_names =
+ PluginManager::GetSaveCorePluginNames();
+ if (!plugin_names.empty()) {
+ stream.PutCString(" valid values are: ");
+ bool is_first = true;
+ for (llvm::StringRef plugin_name : plugin_names) {
+ llvm::StringRef delimiter = ", ";
+ if (is_first) {
+ delimiter = "";
+ is_first = false;
+ }
+ stream.Printf("%s\"%s\"", delimiter.data(), plugin_name.data());
+ }
+ stream.PutChar('.');
+ }
+ return Status(stream.GetString().str());
}
m_plugin_name = name;
More information about the lldb-commits
mailing list