1 /* General python/gdb code
3 Copyright (C) 2008 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "cli/cli-script.h"
28 /* True if we should print the stack when catching a Python error,
30 static int gdbpy_should_print_stack
= 1;
35 #include "libiberty.h"
36 #include "cli/cli-decode.h"
39 #include "exceptions.h"
40 #include "python-internal.h"
43 #include "gdbthread.h"
48 static PyObject
*get_parameter (PyObject
*, PyObject
*);
49 static PyObject
*execute_gdb_command (PyObject
*, PyObject
*);
50 static PyObject
*gdbpy_write (PyObject
*, PyObject
*);
51 static PyObject
*gdbpy_flush (PyObject
*, PyObject
*);
53 static PyMethodDef GdbMethods
[] =
55 { "execute", execute_gdb_command
, METH_VARARGS
,
56 "Execute a gdb command" },
57 { "get_parameter", get_parameter
, METH_VARARGS
,
58 "Return a gdb parameter's value" },
60 { "write", gdbpy_write
, METH_VARARGS
,
61 "Write a string using gdb's filtered stream." },
62 { "flush", gdbpy_flush
, METH_NOARGS
,
63 "Flush gdb's filtered stdout stream." },
68 /* Given a command_line, return a command string suitable for passing
69 to Python. Lines in the string are separated by newlines. The
70 return value is allocated using xmalloc and the caller is
71 responsible for freeing it. */
74 compute_python_string (struct command_line
*l
)
76 struct command_line
*iter
;
81 for (iter
= l
; iter
; iter
= iter
->next
)
82 size
+= strlen (iter
->line
) + 1;
84 script
= xmalloc (size
+ 1);
86 for (iter
= l
; iter
; iter
= iter
->next
)
88 int len
= strlen (iter
->line
);
89 strcpy (&script
[here
], iter
->line
);
91 script
[here
++] = '\n';
97 /* Take a command line structure representing a 'python' command, and
98 evaluate its body using the Python interpreter. */
101 eval_python_from_control_command (struct command_line
*cmd
)
105 if (cmd
->body_count
!= 1)
106 error (_("Invalid \"python\" block structure."));
108 script
= compute_python_string (cmd
->body_list
[0]);
109 PyRun_SimpleString (script
);
111 if (PyErr_Occurred ())
113 gdbpy_print_stack ();
114 error (_("error while executing Python code"));
118 /* Implementation of the gdb "python" command. */
121 python_command (char *arg
, int from_tty
)
123 while (arg
&& *arg
&& isspace (*arg
))
127 PyRun_SimpleString (arg
);
128 if (PyErr_Occurred ())
130 gdbpy_print_stack ();
131 error (_("error while executing Python code"));
136 struct command_line
*l
= get_command_line (python_control
, "");
137 struct cleanup
*cleanups
= make_cleanup_free_command_lines (&l
);
138 execute_control_command_untraced (l
);
139 do_cleanups (cleanups
);
145 /* Transform a gdb parameters's value into a Python value. May return
146 NULL (and set a Python exception) on error. Helper function for
150 parameter_to_python (struct cmd_list_element
*cmd
)
152 switch (cmd
->var_type
)
155 case var_string_noescape
:
156 case var_optional_filename
:
160 char *str
= * (char **) cmd
->var
;
163 return PyString_Decode (str
, strlen (str
), host_charset (), NULL
);
168 if (* (int *) cmd
->var
)
174 case var_auto_boolean
:
176 enum auto_boolean ab
= * (enum auto_boolean
*) cmd
->var
;
177 if (ab
== AUTO_BOOLEAN_TRUE
)
179 else if (ab
== AUTO_BOOLEAN_FALSE
)
186 if ((* (int *) cmd
->var
) == INT_MAX
)
190 return PyLong_FromLong (* (int *) cmd
->var
);
194 unsigned int val
= * (unsigned int *) cmd
->var
;
197 return PyLong_FromUnsignedLong (val
);
201 return PyErr_Format (PyExc_RuntimeError
, "programmer error: unhandled type");
204 /* A Python function which returns a gdb parameter's value as a Python
208 get_parameter (PyObject
*self
, PyObject
*args
)
210 struct cmd_list_element
*alias
, *prefix
, *cmd
;
212 volatile struct gdb_exception except
;
214 if (! PyArg_ParseTuple (args
, "s", &arg
))
217 newarg
= concat ("show ", arg
, (char *) NULL
);
219 TRY_CATCH (except
, RETURN_MASK_ALL
)
221 if (! lookup_cmd_composition (newarg
, &alias
, &prefix
, &cmd
))
224 return PyErr_Format (PyExc_RuntimeError
,
225 "could not find variable `%s'", arg
);
229 GDB_PY_HANDLE_EXCEPTION (except
);
232 return PyErr_Format (PyExc_RuntimeError
, "`%s' is not a variable", arg
);
233 return parameter_to_python (cmd
);
236 /* A Python function which evaluates a string using the gdb CLI. */
239 execute_gdb_command (PyObject
*self
, PyObject
*args
)
241 struct cmd_list_element
*alias
, *prefix
, *cmd
;
243 volatile struct gdb_exception except
;
245 if (! PyArg_ParseTuple (args
, "s", &arg
))
248 TRY_CATCH (except
, RETURN_MASK_ALL
)
250 execute_command (arg
, 0);
252 GDB_PY_HANDLE_EXCEPTION (except
);
254 /* Do any commands attached to breakpoint we stopped at. */
255 bpstat_do_actions ();
264 /* A python function to write a single string using gdb's filtered
267 gdbpy_write (PyObject
*self
, PyObject
*args
)
270 if (! PyArg_ParseTuple (args
, "s", &arg
))
272 printf_filtered ("%s", arg
);
276 /* A python function to flush gdb's filtered output stream. */
278 gdbpy_flush (PyObject
*self
, PyObject
*args
)
280 gdb_flush (gdb_stdout
);
284 /* Print a python exception trace, or print nothing and clear the
285 python exception, depending on gdbpy_should_print_stack. Only call
286 this if a python exception is set. */
288 gdbpy_print_stack (void)
290 if (gdbpy_should_print_stack
)
296 #else /* HAVE_PYTHON */
298 /* Dummy implementation of the gdb "python" command. */
301 python_command (char *arg
, int from_tty
)
303 while (arg
&& *arg
&& isspace (*arg
))
306 error (_("Python scripting is not supported in this copy of GDB."));
309 struct command_line
*l
= get_command_line (python_control
, "");
310 struct cleanup
*cleanups
= make_cleanup_free_command_lines (&l
);
311 execute_control_command_untraced (l
);
312 do_cleanups (cleanups
);
317 eval_python_from_control_command (struct command_line
*cmd
)
319 error (_("Python scripting is not supported in this copy of GDB."));
322 #endif /* HAVE_PYTHON */
326 /* Lists for 'maint set python' commands. */
328 static struct cmd_list_element
*set_python_list
;
329 static struct cmd_list_element
*show_python_list
;
331 /* Function for use by 'maint set python' prefix command. */
334 set_python (char *args
, int from_tty
)
336 help_list (set_python_list
, "maintenance set python ", -1, gdb_stdout
);
339 /* Function for use by 'maint show python' prefix command. */
342 show_python (char *args
, int from_tty
)
344 cmd_show_list (show_python_list
, from_tty
, "");
347 /* Initialize the Python code. */
350 _initialize_python (void)
352 add_com ("python", class_obscure
, python_command
,
355 Evaluate a Python command.\n\
357 The command can be given as an argument, for instance:\n\
361 If no argument is given, the following lines are read and used\n\
362 as the Python commands. Type a line containing \"end\" to indicate\n\
363 the end of the command.")
364 #else /* HAVE_PYTHON */
366 Evaluate a Python command.\n\
368 Python scripting is not supported in this copy of GDB.\n\
369 This command is only a placeholder.")
370 #endif /* HAVE_PYTHON */
373 add_prefix_cmd ("python", no_class
, show_python
,
374 _("Prefix command for python maintenance settings."),
375 &show_python_list
, "maintenance show python ", 0,
376 &maintenance_show_cmdlist
);
377 add_prefix_cmd ("python", no_class
, set_python
,
378 _("Prefix command for python maintenance settings."),
379 &set_python_list
, "maintenance set python ", 0,
380 &maintenance_set_cmdlist
);
382 add_setshow_boolean_cmd ("print-stack", class_maintenance
,
383 &gdbpy_should_print_stack
, _("\
384 Enable or disable printing of Python stack dump on error."), _("\
385 Show whether Python stack will be printed on error."), _("\
386 Enables or disables printing of Python stack traces."),
394 gdb_module
= Py_InitModule ("gdb", GdbMethods
);
396 /* The casts to (char*) are for python 2.4. */
397 PyModule_AddStringConstant (gdb_module
, "VERSION", (char*) version
);
398 PyModule_AddStringConstant (gdb_module
, "HOST_CONFIG", (char*) host_name
);
399 PyModule_AddStringConstant (gdb_module
, "TARGET_CONFIG", (char*) target_name
);
401 PyRun_SimpleString ("import gdb");
403 /* Create a couple objects which are used for Python's stdout and
405 PyRun_SimpleString ("\
407 class GdbOutputFile:\n\
415 def write(self, s):\n\
418 def writelines(self, iterable):\n\
419 for line in iterable:\n\
425 sys.stderr = GdbOutputFile()\n\
426 sys.stdout = GdbOutputFile()\n\
428 #endif /* HAVE_PYTHON */
This page took 0.049361 seconds and 4 git commands to generate.