https://github.com/kastiglione updated 
https://github.com/llvm/llvm-project/pull/152338

>From a298abcf82d56a1ccc10b6bc4ac0fd11765ba1a6 Mon Sep 17 00:00:00 2001
From: Dave Lee <davelee....@gmail.com>
Date: Tue, 5 Aug 2025 15:37:30 -0700
Subject: [PATCH] [lldb] Add "settings modified" command

---
 .../lldb/Interpreter/OptionValueProperties.h  |  3 ++
 .../source/Commands/CommandObjectSettings.cpp | 44 +++++++++++++++++++
 .../API/commands/settings/TestSettings.py     | 11 +++++
 3 files changed, 58 insertions(+)

diff --git a/lldb/include/lldb/Interpreter/OptionValueProperties.h 
b/lldb/include/lldb/Interpreter/OptionValueProperties.h
index 91a3955962372..a68c233e189fd 100644
--- a/lldb/include/lldb/Interpreter/OptionValueProperties.h
+++ b/lldb/include/lldb/Interpreter/OptionValueProperties.h
@@ -163,6 +163,9 @@ class OptionValueProperties
     return false;
   }
 
+  auto begin() const { return m_properties.begin(); }
+  auto end() const { return m_properties.end(); }
+
 protected:
   Property *ProtectedGetPropertyAtIndex(size_t idx) {
     assert(idx < m_properties.size() && "invalid property index");
diff --git a/lldb/source/Commands/CommandObjectSettings.cpp 
b/lldb/source/Commands/CommandObjectSettings.cpp
index 7bbb0dd567ab1..5960feb8c4778 100644
--- a/lldb/source/Commands/CommandObjectSettings.cpp
+++ b/lldb/source/Commands/CommandObjectSettings.cpp
@@ -507,6 +507,48 @@ class CommandObjectSettingsList : public 
CommandObjectParsed {
   }
 };
 
+// CommandObjectSettingsModified -- List modified variables
+
+class CommandObjectSettingsModified : public CommandObjectParsed {
+public:
+  CommandObjectSettingsModified(CommandInterpreter &interpreter)
+      : CommandObjectParsed(interpreter, "settings modified",
+                            "List modified debugger settings.") {}
+
+  ~CommandObjectSettingsModified() override = default;
+
+protected:
+  void HandleProperties(OptionValueProperties *properties, Stream &strm) {
+    if (!properties)
+      return;
+
+    for (const auto &property : *properties) {
+      auto value_sp = property.GetValue();
+      if (!value_sp)
+        continue;
+
+      if (auto *subproperties = value_sp->GetAsProperties()) {
+        HandleProperties(subproperties, strm);
+        continue;
+      }
+
+      if (value_sp->OptionWasSet()) {
+        property.DumpQualifiedName(strm);
+        strm.PutCString(" = ");
+        value_sp->DumpValue(&m_exe_ctx, strm, OptionValue::eDumpOptionValue);
+        strm.EOL();
+      }
+    }
+  }
+
+  void DoExecute(Args &args, CommandReturnObject &result) override {
+    result.SetStatus(eReturnStatusSuccessFinishResult);
+
+    if (auto properties_sp = GetDebugger().GetValueProperties())
+      HandleProperties(properties_sp.get(), result.GetOutputStream());
+  }
+};
+
 // CommandObjectSettingsRemove
 
 class CommandObjectSettingsRemove : public CommandObjectRaw {
@@ -1070,6 +1112,8 @@ 
CommandObjectMultiwordSettings::CommandObjectMultiwordSettings(
                  CommandObjectSP(new CommandObjectSettingsShow(interpreter)));
   LoadSubCommand("list",
                  CommandObjectSP(new CommandObjectSettingsList(interpreter)));
+  LoadSubCommand("modified", CommandObjectSP(new CommandObjectSettingsModified(
+                                 interpreter)));
   LoadSubCommand("remove",
                  CommandObjectSP(new 
CommandObjectSettingsRemove(interpreter)));
   LoadSubCommand("replace", CommandObjectSP(
diff --git a/lldb/test/API/commands/settings/TestSettings.py 
b/lldb/test/API/commands/settings/TestSettings.py
index bc864942055c0..2dceb49e9eab8 100644
--- a/lldb/test/API/commands/settings/TestSettings.py
+++ b/lldb/test/API/commands/settings/TestSettings.py
@@ -1052,3 +1052,14 @@ def test_global_option(self):
         # NULL execution context (not one with an empty Target...) and in the
         # special handling for load-script-from-symbol-file this wasn't 
checked.
         self.runCmd("settings set -g target.load-script-from-symbol-file true")
+
+    def test_modified(self):
+        self.runCmd("settings set notify-void true")
+        self.runCmd("settings set target.process.optimization-warnings false")
+        self.expect(
+            "settings modified",
+            substrs=[
+                "notify-void = true",
+                "target.process.optimization-warnings = false",
+            ],
+        )

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to