** New function gdb.host_charset(), returns a string, which is the
name of the current host charset.
+ ** New gdb.set_parameter(NAME, VALUE). This sets the gdb parameter
+ NAME to VALUE.
+
+ ** New gdb.with_parameter(NAME, VALUE). This returns a context
+ manager that temporarily sets the gdb parameter NAME to VALUE,
+ then resets it when the context is exited.
+
* New features in the GDB remote stub, GDBserver
** GDBserver is now supported on OpenRISC GNU/Linux.
type, and returned.
@end defun
+@findex gdb.set_parameter
+@defun gdb.set_parameter (name, value)
+Sets the gdb parameter @var{name} to @var{value}. As with
+@code{gdb.parameter}, the parameter name string may contain spaces if
+the parameter has a multi-part name.
+@end defun
+
+@findex gdb.with_parameter
+@defun gdb.with_parameter (name, value)
+Create a Python context manager (for use with the Python
+@command{with} statement) that temporarily sets the gdb parameter
+@var{name} to @var{value}. On exit from the context, the previous
+value will be restored.
+
+This uses @code{gdb.parameter} in its implementation, so it can throw
+the same exceptions as that function.
+
+For example, it's sometimes useful to evaluate some Python code with a
+particular gdb language:
+
+@smallexample
+with gdb.with_parameter('language', 'pascal'):
+ ... language-specific operations
+@end smallexample
+@end defun
+
@findex gdb.history
@defun gdb.history (number)
Return a value from @value{GDBN}'s value history (@pxref{Value
import os
import sys
import _gdb
+from contextlib import contextmanager
# Python 3 moved "reload"
if sys.version_info >= (3, 4):
return current_progspace().find_pc_line(pc)
+def set_parameter(name, value):
+ """Set the GDB parameter NAME to VALUE."""
+ execute('set ' + name + ' ' + str(value), to_string=True)
+
+
+@contextmanager
+def with_parameter(name, value):
+ """Temporarily set the GDB parameter NAME to VALUE.
+ Note that this is a context manager."""
+ old_value = parameter(name)
+ set_parameter(name, value)
+ try:
+ # Nothing that useful to return.
+ yield None
+ finally:
+ set_parameter(name, old_value)
+
+
try:
from pygments import formatters, lexers, highlight
test_lookup_type "pascal" "char"
+gdb_test "show language" \
+ "The current source language is .pascal.." \
+ "show language before 'with'"
+gdb_test_multiline "look up type using set_parameter" \
+ "python" "" \
+ "with gdb.with_parameter('language', 'ada'):" "" \
+ " print(gdb.lookup_type('character'))" "" \
+ "end" "character"
+gdb_test "show language" \
+ "The current source language is .pascal.." \
+ "show language after 'with'"
+
+
# Ensure that the language can be changed from within Python and still
# affect the results.
gdb_test_multiline "look up ada type from another language" \
"gdb.execute('set language ada')" "" \
"print(gdb.lookup_type('character'))" "" \
"end" "character"
+
+gdb_test_no_output "python gdb.set_parameter('language', 'rust')"
+gdb_test "show language" \
+ "The current source language is .rust.." \
+ "show language after 'set_parameter'"