forked from Imagelibrary/binutils-gdb
Allow setting a parameter to raise gdb.GdbError
A convention in the Python layer is that raising a gdb.GdbError will not print the Python stack -- instead the exception is treated as any other gdb exception. PR python/18852 asks that this treatment be extended the the get_set_value method of gdb.Parameter. This makes sense, because it lets Python-created parameters act like gdb parameters. 2018-09-23 Tom Tromey <tom@tromey.com> PR python/18852: * python/py-param.c (get_set_value): Use gdbpy_handle_exception. gdb/doc/ChangeLog 2018-09-23 Tom Tromey <tom@tromey.com> PR python/18852: * python.texi (Parameters In Python): Document exception behavior of get_set_string. gdb/testsuite/ChangeLog 2018-09-23 Tom Tromey <tom@tromey.com> PR python/18852: * gdb.python/py-parameter.exp: Add test for parameter that throws on "set".
This commit is contained in:
@@ -3828,6 +3828,30 @@ example, @kbd{set foo off}). The @code{value} attribute has already
|
||||
been populated with the new value and may be used in output. This
|
||||
method must return a string. If the returned string is not empty,
|
||||
@value{GDBN} will present it to the user.
|
||||
|
||||
If this method raises the @code{gdb.GdbError} exception
|
||||
(@pxref{Exception Handling}), then @value{GDBN} will print the
|
||||
exception's string and the @code{set} command will fail. Note,
|
||||
however, that the @code{value} attribute will not be reset in this
|
||||
case. So, if your parameter must validate values, it should store the
|
||||
old value internally and reset the exposed value, like so:
|
||||
|
||||
@smallexample
|
||||
class ExampleParam (gdb.Parameter):
|
||||
def __init__ (self, name):
|
||||
super (ExampleParam, self).__init__ (name,
|
||||
gdb.COMMAND_DATA,
|
||||
gdb.PARAM_BOOLEAN)
|
||||
self.value = True
|
||||
self.saved_value = True
|
||||
def validate(self):
|
||||
return False
|
||||
def get_set_string (self):
|
||||
if not self.validate():
|
||||
self.value = self.saved_value
|
||||
raise gdb.GdbError('Failed to validate')
|
||||
self.saved_value = self.value
|
||||
@end smallexample
|
||||
@end defun
|
||||
|
||||
@defun Parameter.get_show_string (self, svalue)
|
||||
|
||||
Reference in New Issue
Block a user