1 /* gdb commands implemented in Python
3 Copyright (C) 2008, 2009, 2010 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/>. */
22 #include "arch-utils.h"
24 #include "exceptions.h"
25 #include "python-internal.h"
28 #include "cli/cli-decode.h"
29 #include "completer.h"
32 /* Struct representing built-in completion types. */
33 struct cmdpy_completer
35 /* Python symbol name. */
37 /* Completion function. */
38 char **(*completer) (struct cmd_list_element *, char *, char *);
41 static struct cmdpy_completer completers[] =
43 { "COMPLETE_NONE", noop_completer },
44 { "COMPLETE_FILENAME", filename_completer },
45 { "COMPLETE_LOCATION", location_completer },
46 { "COMPLETE_COMMAND", command_completer },
47 { "COMPLETE_SYMBOL", make_symbol_completion_list_fn },
50 #define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
52 /* A gdb command. For the time being only ordinary commands (not
53 set/show commands) are allowed. */
58 /* The corresponding gdb command object, or NULL if the command is
59 no longer installed. */
60 struct cmd_list_element *command;
62 /* A prefix command requires storage for a list of its sub-commands.
63 A pointer to this is passed to add_prefix_command, and to add_cmd
64 for sub-commands of that prefix. If this Command is not a prefix
65 command, then this field is unused. */
66 struct cmd_list_element *sub_list;
69 typedef struct cmdpy_object cmdpy_object;
71 static PyTypeObject cmdpy_object_type;
74 /* Constants used by this module. */
75 static PyObject *invoke_cst;
76 static PyObject *complete_cst;
80 /* Python function which wraps dont_repeat. */
82 cmdpy_dont_repeat (PyObject *self, PyObject *args)
90 /* Called if the gdb cmd_list_element is destroyed. */
93 cmdpy_destroyer (struct cmd_list_element *self, void *context)
96 struct cleanup *cleanup;
98 cleanup = ensure_python_env (get_current_arch (), current_language);
100 /* Release our hold on the command object. */
101 cmd = (cmdpy_object *) context;
105 /* We allocated the name, doc string, and perhaps the prefix
109 xfree (self->prefixname);
111 do_cleanups (cleanup);
114 /* Called by gdb to invoke the command. */
117 cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
119 cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
120 PyObject *argobj, *ttyobj, *result;
121 struct cleanup *cleanup;
123 cleanup = ensure_python_env (get_current_arch (), current_language);
126 error (_("Invalid invocation of Python command object."));
127 if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
129 if (obj->command->prefixname)
131 /* A prefix command does not need an invoke method. */
132 do_cleanups (cleanup);
135 error (_("Python command object missing 'invoke' method."));
140 argobj = PyUnicode_Decode (args, strlen (args), host_charset (), NULL);
143 gdbpy_print_stack ();
144 error (_("Could not convert arguments to Python string."));
147 ttyobj = from_tty ? Py_True : Py_False;
149 result = PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst, argobj,
156 PyObject *ptype, *pvalue, *ptraceback;
159 PyErr_Fetch (&ptype, &pvalue, &ptraceback);
161 /* Try to fetch an error message contained within ptype, pvalue.
162 When fetching the error message we need to make our own copy,
163 we no longer own ptype, pvalue after the call to PyErr_Restore. */
165 msg = gdbpy_exception_to_string (ptype, pvalue);
166 make_cleanup (xfree, msg);
170 /* An error occurred computing the string representation of the
171 error message. This is rare, but we should inform the user. */
172 printf_filtered (_("An error occurred in a Python command\n"
173 "and then another occurred computing the error message.\n"));
174 gdbpy_print_stack ();
177 /* Don't print the stack for gdb.GdbError exceptions.
178 It is generally used to flag user errors.
180 We also don't want to print "Error occurred in Python command"
181 for user errors. However, a missing message for gdb.GdbError
182 exceptions is arguably a bug, so we flag it as such. */
184 if (! PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
185 || msg == NULL || *msg == '\0')
187 PyErr_Restore (ptype, pvalue, ptraceback);
188 gdbpy_print_stack ();
189 if (msg != NULL && *msg != '\0')
190 error (_("Error occurred in Python command: %s"), msg);
192 error (_("Error occurred in Python command."));
198 Py_XDECREF (ptraceback);
204 do_cleanups (cleanup);
207 /* Called by gdb for command completion. */
209 cmdpy_completer (struct cmd_list_element *command, char *text, char *word)
211 cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
212 PyObject *textobj, *wordobj, *resultobj = NULL;
213 char **result = NULL;
214 struct cleanup *cleanup;
216 cleanup = ensure_python_env (get_current_arch (), current_language);
219 error (_("Invalid invocation of Python command object."));
220 if (! PyObject_HasAttr ((PyObject *) obj, complete_cst))
222 /* If there is no complete method, don't error -- instead, just
223 say that there are no completions. */
227 textobj = PyUnicode_Decode (text, strlen (text), host_charset (), NULL);
229 error (_("Could not convert argument to Python string."));
230 wordobj = PyUnicode_Decode (word, strlen (word), host_charset (), NULL);
232 error (_("Could not convert argument to Python string."));
234 resultobj = PyObject_CallMethodObjArgs ((PyObject *) obj, complete_cst,
235 textobj, wordobj, NULL);
240 /* Just swallow errors here. */
244 make_cleanup_py_decref (resultobj);
247 if (PySequence_Check (resultobj))
249 Py_ssize_t i, len = PySequence_Size (resultobj);
255 result = (char **) xmalloc ((len + 1) * sizeof (char *));
256 for (i = out = 0; i < len; ++i)
258 PyObject *elt = PySequence_GetItem (resultobj, i);
260 if (elt == NULL || ! gdbpy_is_string (elt))
262 /* Skip problem elements. */
266 result[out] = python_string_to_host_string (elt);
267 if (result[out] == NULL)
269 /* Skip problem elements. */
277 else if (PyInt_Check (resultobj))
279 /* User code may also return one of the completion constants,
280 thus requesting that sort of completion. */
281 long value = PyInt_AsLong (resultobj);
283 if (value >= 0 && value < (long) N_COMPLETERS)
284 result = completers[value].completer (command, text, word);
289 do_cleanups (cleanup);
294 /* Helper for cmdpy_init which locates the command list to use and
295 pulls out the command name.
297 TEXT is the command name list. The final word in the list is the
298 name of the new command. All earlier words must be existing prefix
301 *BASE_LIST is set to the final prefix command's list of
304 START_LIST is the list in which the search starts.
306 This function returns the xmalloc()d name of the new command. On
307 error sets the Python error and returns NULL. */
309 gdbpy_parse_command_name (char *text,
310 struct cmd_list_element ***base_list,
311 struct cmd_list_element **start_list)
313 struct cmd_list_element *elt;
314 int len = strlen (text);
319 /* Skip trailing whitespace. */
320 for (i = len - 1; i >= 0 && (text[i] == ' ' || text[i] == '\t'); --i)
324 PyErr_SetString (PyExc_RuntimeError, _("No command name found."));
329 /* Find first character of the final word. */
330 for (; i > 0 && (isalnum (text[i - 1])
331 || text[i - 1] == '-'
332 || text[i - 1] == '_');
335 result = xmalloc (lastchar - i + 2);
336 memcpy (result, &text[i], lastchar - i + 1);
337 result[lastchar - i + 1] = '\0';
339 /* Skip whitespace again. */
340 for (--i; i >= 0 && (text[i] == ' ' || text[i] == '\t'); --i)
344 *base_list = start_list;
348 prefix_text = xmalloc (i + 2);
349 memcpy (prefix_text, text, i + 1);
350 prefix_text[i + 1] = '\0';
353 elt = lookup_cmd_1 (&text, *start_list, NULL, 1);
354 if (!elt || elt == (struct cmd_list_element *) -1)
356 PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."),
366 *base_list = elt->prefixlist;
370 PyErr_Format (PyExc_RuntimeError, _("'%s' is not a prefix command."),
377 /* Object initializer; sets up gdb-side structures for command.
379 Use: __init__(NAME, COMMAND_CLASS [, COMPLETER_CLASS][, PREFIX]]).
381 NAME is the name of the command. It may consist of multiple words,
382 in which case the final word is the name of the new command, and
383 earlier words must be prefix commands.
385 COMMAND_CLASS is the kind of command. It should be one of the COMMAND_*
386 constants defined in the gdb module.
388 COMPLETER_CLASS is the kind of completer. If not given, the
389 "complete" method will be used. Otherwise, it should be one of the
390 COMPLETE_* constants defined in the gdb module.
392 If PREFIX is True, then this command is a prefix command.
394 The documentation for the command is taken from the doc string for
399 cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
401 cmdpy_object *obj = (cmdpy_object *) self;
404 int completetype = -1;
405 char *docstring = NULL;
406 volatile struct gdb_exception except;
407 struct cmd_list_element **cmd_list;
408 char *cmd_name, *pfx_name;
409 static char *keywords[] = { "name", "command_class", "completer_class",
411 PyObject *is_prefix = NULL;
416 /* Note: this is apparently not documented in Python. We return
417 0 for success, -1 for failure. */
418 PyErr_Format (PyExc_RuntimeError,
419 _("Command object already initialized."));
423 if (! PyArg_ParseTupleAndKeywords (args, kw, "si|iO", keywords, &name, &cmdtype,
424 &completetype, &is_prefix))
427 if (cmdtype != no_class && cmdtype != class_run
428 && cmdtype != class_vars && cmdtype != class_stack
429 && cmdtype != class_files && cmdtype != class_support
430 && cmdtype != class_info && cmdtype != class_breakpoint
431 && cmdtype != class_trace && cmdtype != class_obscure
432 && cmdtype != class_maintenance)
434 PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
438 if (completetype < -1 || completetype >= (int) N_COMPLETERS)
440 PyErr_Format (PyExc_RuntimeError, _("Invalid completion type argument."));
444 cmd_name = gdbpy_parse_command_name (name, &cmd_list, &cmdlist);
449 if (is_prefix != NULL)
451 cmp = PyObject_IsTrue (is_prefix);
456 /* Make a normalized form of the command name. */
457 pfx_name = xmalloc (strlen (name) + 2);
463 /* Skip whitespace. */
464 while (name[i] == ' ' || name[i] == '\t')
466 /* Copy non-whitespace characters. */
467 while (name[i] && name[i] != ' ' && name[i] != '\t')
468 pfx_name[out++] = name[i++];
469 /* Add a single space after each word -- including the final
471 pfx_name[out++] = ' ';
473 pfx_name[out] = '\0';
478 if (PyObject_HasAttr (self, gdbpy_doc_cst))
480 PyObject *ds_obj = PyObject_GetAttr (self, gdbpy_doc_cst);
482 if (ds_obj && gdbpy_is_string (ds_obj))
484 docstring = python_string_to_host_string (ds_obj);
485 if (docstring == NULL)
494 docstring = xstrdup (_("This command is not documented."));
498 TRY_CATCH (except, RETURN_MASK_ALL)
500 struct cmd_list_element *cmd;
506 /* If we have our own "invoke" method, then allow unknown
508 allow_unknown = PyObject_HasAttr (self, invoke_cst);
509 cmd = add_prefix_cmd (cmd_name, (enum command_class) cmdtype,
510 NULL, docstring, &obj->sub_list,
511 pfx_name, allow_unknown, cmd_list);
514 cmd = add_cmd (cmd_name, (enum command_class) cmdtype, NULL,
515 docstring, cmd_list);
517 /* There appears to be no API to set this. */
518 cmd->func = cmdpy_function;
519 cmd->destroyer = cmdpy_destroyer;
522 set_cmd_context (cmd, self);
523 set_cmd_completer (cmd, ((completetype == -1) ? cmdpy_completer
524 : completers[completetype].completer));
526 if (except.reason < 0)
532 PyErr_Format (except.reason == RETURN_QUIT
533 ? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
534 "%s", except.message);
542 /* Initialize the 'commands' code. */
544 gdbpy_initialize_commands (void)
548 if (PyType_Ready (&cmdpy_object_type) < 0)
551 /* Note: alias and user are special; pseudo appears to be unused,
552 and there is no reason to expose tui or xdb, I think. */
553 if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0
554 || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0
555 || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0
556 || PyModule_AddIntConstant (gdb_module, "COMMAND_STACK", class_stack) < 0
557 || PyModule_AddIntConstant (gdb_module, "COMMAND_FILES", class_files) < 0
558 || PyModule_AddIntConstant (gdb_module, "COMMAND_SUPPORT",
560 || PyModule_AddIntConstant (gdb_module, "COMMAND_STATUS", class_info) < 0
561 || PyModule_AddIntConstant (gdb_module, "COMMAND_BREAKPOINTS",
562 class_breakpoint) < 0
563 || PyModule_AddIntConstant (gdb_module, "COMMAND_TRACEPOINTS",
565 || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
567 || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
568 class_maintenance) < 0)
571 for (i = 0; i < N_COMPLETERS; ++i)
573 if (PyModule_AddIntConstant (gdb_module, completers[i].name, i) < 0)
577 Py_INCREF (&cmdpy_object_type);
578 PyModule_AddObject (gdb_module, "Command",
579 (PyObject *) &cmdpy_object_type);
581 invoke_cst = PyString_FromString ("invoke");
582 complete_cst = PyString_FromString ("complete");
587 static PyMethodDef cmdpy_object_methods[] =
589 { "dont_repeat", cmdpy_dont_repeat, METH_NOARGS,
590 "Prevent command repetition when user enters empty line." },
595 static PyTypeObject cmdpy_object_type =
597 PyObject_HEAD_INIT (NULL)
599 "gdb.Command", /*tp_name*/
600 sizeof (cmdpy_object), /*tp_basicsize*/
609 0, /*tp_as_sequence*/
617 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
618 "GDB command object", /* tp_doc */
621 0, /* tp_richcompare */
622 0, /* tp_weaklistoffset */
625 cmdpy_object_methods, /* tp_methods */
630 0, /* tp_descr_get */
631 0, /* tp_descr_set */
632 0, /* tp_dictoffset */
633 cmdpy_init, /* tp_init */
635 PyType_GenericNew /* tp_new */
640 /* Utility to build a buildargv-like result from ARGS.
641 This intentionally parses arguments the way libiberty/argv.c:buildargv
642 does. It splits up arguments in a reasonable way, and we want a standard
643 way of parsing arguments. Several gdb commands use buildargv to parse their
644 arguments. Plus we want to be able to write compatible python
645 implementations of gdb commands. */
648 gdbpy_string_to_argv (PyObject *self, PyObject *args)
653 if (!PyArg_ParseTuple (args, "s", &input))
656 py_argv = PyList_New (0);
658 /* buildargv uses NULL to represent an empty argument list, but we can't use
659 that in Python. Instead, if ARGS is "" then return an empty list.
660 This undoes the NULL -> "" conversion that cmdpy_function does. */
664 char **c_argv = gdb_buildargv (input);
667 for (i = 0; c_argv[i] != NULL; ++i)
669 PyObject *argp = PyString_FromString (c_argv[i]);
672 || PyList_Append (py_argv, argp) < 0)