Handle bool specially in gdb.set_parameter
authorTom Tromey <tom@tromey.com>
Sun, 12 Jun 2022 17:36:08 +0000 (11:36 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 8 Jul 2022 19:56:56 +0000 (13:56 -0600)
PR python/29217 points out that gdb.parameter will return bool values,
but gdb.set_parameter will not properly accept them.  This patch fixes
the problem by adding a special case to set_parameter.

I looked at a fix involving rewriting set_parameter in C++.  However,
this one is simpler.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29217

gdb/python/lib/gdb/__init__.py
gdb/testsuite/gdb.python/py-parameter.exp

index 17ee6a19e14a96b75c7c3eb6b3279f21e0be033a..9e9978ef30e352f58ab36ccb2bebb24c55e8bbfc 100644 (file)
@@ -239,6 +239,13 @@ def find_pc_line(pc):
 
 def set_parameter(name, value):
     """Set the GDB parameter NAME to VALUE."""
+    # Handle the specific case of booleans here, because gdb.parameter
+    # can return them, but they can't be passed to 'set' this way.
+    if isinstance(value, bool):
+        if value:
+            value = 'on'
+        else:
+            value = 'off'
     execute("set " + name + " " + str(value), to_string=True)
 
 
index db158ddec26108c544aae5c41955f19851cef3ae..d6db6ac3bb173267e1d0f19e28f1cb01ed6922a9 100644 (file)
@@ -126,6 +126,10 @@ proc_with_prefix test_boolean_parameter { } {
        "The state of the Test Parameter is off.*" "show parameter off"
     gdb_test "python print (test_param.value)" "False" \
        "test boolean parameter value is False"
+    gdb_test_no_output "python gdb.set_parameter('print test-param', True)" \
+       "set boolean parameter using set_parameter"
+    gdb_test "python print(gdb.parameter('print test-param'))" "True" \
+       "get boolean parameter using gdb.parameter"
     gdb_test "help show print test-param" \
        [multi_line \
             "Show the state of the boolean test-param" \