[Lldb-commits] [lldb] c93dc25 - [LLDB][GUI] Add Process Plugin Field
Greg Clayton via lldb-commits
lldb-commits at lists.llvm.org
Wed Jul 21 14:38:40 PDT 2021
Author: Omar Emara
Date: 2021-07-21T14:38:29-07:00
New Revision: c93dc2597a587bc4caedc20f3829501f88cca288
URL: https://github.com/llvm/llvm-project/commit/c93dc2597a587bc4caedc20f3829501f88cca288
DIFF: https://github.com/llvm/llvm-project/commit/c93dc2597a587bc4caedc20f3829501f88cca288.diff
LOG: [LLDB][GUI] Add Process Plugin Field
This patch adds a new Process Plugin Field. It is a choices field that
lists all the available process plugins and can retrieve the name of the
selected plugin or an empty string if the default is selected.
The Attach form now uses that field instead of manually creating a
choices field.
Reviewed By: clayborg
Differential Revision: https://reviews.llvm.org/D106467
Added:
Modified:
lldb/source/Core/IOHandlerCursesGUI.cpp
Removed:
################################################################################
diff --git a/lldb/source/Core/IOHandlerCursesGUI.cpp b/lldb/source/Core/IOHandlerCursesGUI.cpp
index d54c27cea0c8..1779a5b1e882 100644
--- a/lldb/source/Core/IOHandlerCursesGUI.cpp
+++ b/lldb/source/Core/IOHandlerCursesGUI.cpp
@@ -1504,6 +1504,29 @@ class ChoicesFieldDelegate : public FieldDelegate {
int m_first_visibile_choice;
};
+class ProcessPluginFieldDelegate : public ChoicesFieldDelegate {
+public:
+ ProcessPluginFieldDelegate()
+ : ChoicesFieldDelegate("Process Plugin", 3, GetPossiblePluginNames()) {}
+
+ std::vector<std::string> GetPossiblePluginNames() {
+ std::vector<std::string> names;
+ names.push_back("<default>");
+
+ size_t i = 0;
+ while (auto name = PluginManager::GetProcessPluginNameAtIndex(i++))
+ names.push_back(name);
+ return names;
+ }
+
+ std::string GetPluginName() {
+ std::string plugin_name = GetChoiceContent();
+ if (plugin_name == "<default>")
+ return "";
+ return plugin_name;
+ }
+};
+
template <class T> class ListFieldDelegate : public FieldDelegate {
public:
ListFieldDelegate(const char *label, T default_field)
@@ -1899,6 +1922,12 @@ class FormDelegate {
return delegate;
}
+ ProcessPluginFieldDelegate *AddProcessPluginField() {
+ ProcessPluginFieldDelegate *delegate = new ProcessPluginFieldDelegate();
+ m_fields.push_back(FieldDelegateUP(delegate));
+ return delegate;
+ }
+
template <class T>
ListFieldDelegate<T> *AddListField(const char *label, T default_field) {
ListFieldDelegate<T> *delegate =
@@ -2347,8 +2376,7 @@ class ProcessAttachFormDelegate : public FormDelegate {
m_include_existing_field =
AddBooleanField("Include existing processes.", false);
m_show_advanced_field = AddBooleanField("Show advanced settings.", false);
- m_plugin_field =
- AddChoicesField("Plugin Name", 3, GetPossiblePluginNames());
+ m_plugin_field = AddProcessPluginField();
AddAction("Attach", [this](Window &window) { Attach(window); });
}
@@ -2390,16 +2418,6 @@ class ProcessAttachFormDelegate : public FormDelegate {
return module_sp->GetFileSpec().GetFilename().AsCString();
}
- std::vector<std::string> GetPossiblePluginNames() {
- std::vector<std::string> names;
- names.push_back("<default>");
-
- size_t i = 0;
- while (auto name = PluginManager::GetProcessPluginNameAtIndex(i++))
- names.push_back(name);
- return names;
- }
-
bool StopRunningProcess() {
ExecutionContext exe_ctx =
m_debugger.GetCommandInterpreter().GetExecutionContext();
@@ -2455,8 +2473,7 @@ class ProcessAttachFormDelegate : public FormDelegate {
} else {
attach_info.SetProcessID(m_pid_field->GetInteger());
}
- if (m_plugin_field->GetChoiceContent() != "<default>")
- attach_info.SetProcessPluginName(m_plugin_field->GetChoiceContent());
+ attach_info.SetProcessPluginName(m_plugin_field->GetPluginName());
return attach_info;
}
@@ -2504,7 +2521,7 @@ class ProcessAttachFormDelegate : public FormDelegate {
BooleanFieldDelegate *m_wait_for_field;
BooleanFieldDelegate *m_include_existing_field;
BooleanFieldDelegate *m_show_advanced_field;
- ChoicesFieldDelegate *m_plugin_field;
+ ProcessPluginFieldDelegate *m_plugin_field;
};
class MenuDelegate {
More information about the lldb-commits
mailing list