Sync gdb.Parameter when config.Parameter changes (#2749)

Set the parameter in gdb to the new value when the abstraction in
pwndbg.lib.config.Parameter changes. This makes sure other commands
accessing the value in gdb like "show <parameter>" display the correct value.

Fixes #2744
pull/2753/head
peace-maker 10 months ago committed by GitHub
parent 22298d01f7
commit 304e83182b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -53,6 +53,7 @@ class Parameter(gdb.Parameter):
self.init_super(param)
self.param = param
self.value = param.value
self.param.add_update_listener(self.on_change)
def init_super(self, param: pwndbg.lib.config.Parameter) -> None:
"""Initializes the super class for GDB >= 9"""
@ -67,6 +68,12 @@ class Parameter(gdb.Parameter):
return
super().__init__(param.name, gdb.COMMAND_SUPPORT, c)
def on_change(self, value: Any) -> None:
"""Called when the value of the pwndbg.lib.config.Parameter changes
Transfer the value to the GDB parameter to keep them in sync.
"""
self.value = value
@property
def native_value(self):
return Parameter._value_to_gdb_native(

@ -70,10 +70,24 @@ class Parameter:
self.help_docstring = help_docstring.strip()
self.name = name
self.default = default
self.value = default
self._value = default
self.param_class = param_class or PARAM_CLASSES[type(default)]
self.enum_sequence = enum_sequence
self.scope = scope
self.update_listeners: List[Callable[[Any], None]] = []
def add_update_listener(self, listener: Callable[[Any], None]) -> None:
self.update_listeners.append(listener)
@property
def value(self) -> Any:
return self._value
@value.setter
def value(self, value: Any) -> None:
self._value = value
for listener in self.update_listeners:
listener(value)
@property
def is_changed(self) -> bool:

Loading…
Cancel
Save