From c97d123d6701fbf462e96db001cea07ed32e4efa Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 16 Mar 2023 10:57:32 -0600 Subject: Implement gdb.execute_mi This adds a new Python function, gdb.execute_mi, that can be used to invoke an MI command but get the output as a Python object, rather than a string. This is done by implementing a new ui_out subclass that builds a Python object. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11688 Reviewed-By: Eli Zaretskii --- gdb/doc/python.texi | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'gdb/doc/python.texi') diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index c93f289..d1f9311 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -4584,6 +4584,36 @@ commands have been added: (@value{GDBP}) @end smallexample +Conversely, it is possible to execute @sc{gdb/mi} commands from +Python, with the results being a Python object and not a +specially-formatted string. This is done with the +@code{gdb.execute_mi} function. + +@findex gdb.execute_mi +@defun gdb.execute_mi (command @r{[}, arg @r{]}@dots{}) +Invoke a @sc{gdb/mi} command. @var{command} is the name of the +command, a string. The arguments, @var{arg}, are passed to the +command. Each argument must also be a string. + +This function returns a Python dictionary whose contents reflect the +corresponding @sc{GDB/MI} command's output. Refer to the +documentation for these commands for details. Lists are represented +as Python lists, and tuples are represented as Python dictionaries. + +If the command fails, it will raise a Python exception. +@end defun + +Here is how this works using the commands from the example above: + +@smallexample +(@value{GDBP}) python print(gdb.execute_mi("-echo-dict", "abc", "def", "ghi")) +@{'dict': @{'argv': ['abc', 'def', 'ghi']@}@} +(@value{GDBP}) python print(gdb.execute_mi("-echo-list", "abc", "def", "ghi")) +@{'list': ['abc', 'def', 'ghi']@} +(@value{GDBP}) python print(gdb.execute_mi("-echo-string", "abc", "def", "ghi")) +@{'string': 'abc, def, ghi'@} +@end smallexample + @node Parameters In Python @subsubsection Parameters In Python -- cgit v1.1