tatyana-krasnukha updated this revision to Diff 308325.
tatyana-krasnukha added a comment.

Removed refactoring to make the changes clearer.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92164/new/

https://reviews.llvm.org/D92164

Files:
  lldb/packages/Python/lldbsuite/test/python_api/debugger/Makefile
  lldb/packages/Python/lldbsuite/test/python_api/debugger/main.cpp
  lldb/source/API/SBDebugger.cpp
  lldb/test/API/python_api/debugger/TestDebuggerAPI.py

Index: lldb/test/API/python_api/debugger/TestDebuggerAPI.py
===================================================================
--- lldb/test/API/python_api/debugger/TestDebuggerAPI.py
+++ lldb/test/API/python_api/debugger/TestDebuggerAPI.py
@@ -43,3 +43,54 @@
         target = lldb.SBTarget()
         self.assertFalse(target.IsValid())
         self.dbg.DeleteTarget(target)
+
+    def test_debugger_internal_variable(self):
+        """Ensure that SBDebugger reachs the same instance of properties
+           regardless CommandInterpreter's context initialization"""
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+
+        # Create a target by the debugger.
+        target = self.dbg.CreateTarget(exe)
+        self.assertTrue(target, VALID_TARGET)
+
+        property_name = "target.process.memory-cache-line-size"
+
+        def get_cache_line_size():
+            value_list = lldb.SBStringList()
+            value_list = self.dbg.GetInternalVariableValue(property_name,
+                                                           self.dbg.GetInstanceName())
+
+            self.assertEqual(value_list.GetSize(), 1)
+            try:
+                return int(value_list.GetStringAtIndex(0))
+            except ValueError as error:
+                self.fail("Value is not a number: " + error)
+
+        # Get global property value while there are no processes.
+        global_cache_line_size = get_cache_line_size()
+
+        # Run a process via SB interface. CommandInterpreter's execution context
+        # remains empty.
+        error = lldb.SBError()
+        launch_info = lldb.SBLaunchInfo(None)
+        launch_info.SetLaunchFlags(lldb.eLaunchFlagStopAtEntry)
+        process = target.Launch(launch_info, error)
+        self.assertTrue(process, PROCESS_IS_VALID)
+
+        # This should change the value of a process's local property.
+        new_cache_line_size = global_cache_line_size + 512
+        error = self.dbg.SetInternalVariable(property_name,
+                                             str(new_cache_line_size),
+                                             self.dbg.GetInstanceName())
+        self.assertTrue(error.Success(),
+                        property_name + " value was changed successfully")
+
+        # Check that it was set actually.
+        self.assertEqual(get_cache_line_size(), new_cache_line_size)
+
+        # Run any command to initialize CommandInterpreter's execution context.
+        self.runCmd("target list")
+
+        # Test the local property again, is it set to new_cache_line_size?
+        self.assertEqual(get_cache_line_size(), new_cache_line_size)
Index: lldb/source/API/SBDebugger.cpp
===================================================================
--- lldb/source/API/SBDebugger.cpp
+++ lldb/source/API/SBDebugger.cpp
@@ -1270,13 +1270,12 @@
       ConstString(debugger_instance_name)));
   Status error;
   if (debugger_sp) {
-    ExecutionContext exe_ctx(
-        debugger_sp->GetCommandInterpreter().GetExecutionContext());
+    ExecutionContext exe_ctx(debugger_sp->GetSelectedTarget(), true);
     error = debugger_sp->SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
                                           var_name, value);
   } else {
-    error.SetErrorStringWithFormat("invalid debugger instance name '%s'",
-                                   debugger_instance_name);
+    error.SetErrorStringWithFormatv("invalid debugger instance name {0}",
+                                    debugger_instance_name);
   }
   if (error.Fail())
     sb_error.SetError(error);
@@ -1295,8 +1294,7 @@
       ConstString(debugger_instance_name)));
   Status error;
   if (debugger_sp) {
-    ExecutionContext exe_ctx(
-        debugger_sp->GetCommandInterpreter().GetExecutionContext());
+    ExecutionContext exe_ctx(debugger_sp->GetSelectedTarget(), true);
     lldb::OptionValueSP value_sp(
         debugger_sp->GetPropertyValue(&exe_ctx, var_name, false, error));
     if (value_sp) {
@@ -1308,7 +1306,15 @@
         string_list.SplitIntoLines(value_str);
         return LLDB_RECORD_RESULT(SBStringList(&string_list));
       }
+    } else {
+      Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
+      LLDB_LOG_ERROR(log, error.ToError(), "cannot get property value: {0}");
     }
+  } else {
+    Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
+    error.SetErrorStringWithFormatv("invalid debugger instance name {0}",
+                                    debugger_instance_name);
+    LLDB_LOG_ERROR(log, error.ToError(), "cannot get internal variable: {0}");
   }
   return LLDB_RECORD_RESULT(SBStringList());
 }
Index: lldb/packages/Python/lldbsuite/test/python_api/debugger/main.cpp
===================================================================
--- /dev/null
+++ lldb/packages/Python/lldbsuite/test/python_api/debugger/main.cpp
@@ -0,0 +1,18 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+
+// This simple program is to test the lldb Python API SBDebugger.
+
+int func(int val) {
+    return val - 1;
+}
+
+int main (int argc, char const *argv[]) {   
+    return func(argc);
+}
Index: lldb/packages/Python/lldbsuite/test/python_api/debugger/Makefile
===================================================================
--- /dev/null
+++ lldb/packages/Python/lldbsuite/test/python_api/debugger/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to