2011-12-16 Phil Muldoon <pmuldoon@redhat.com>
* testsuite/gdb.python/py-function.exp: Change "on" to "full" for python print-stack. Add set/show python print-stack off|full|message tests. 2011-12-16 Phil Muldoon <pmuldoon@redhat.com> * python/python.c: Define python_excp_enums. (eval_python_from_control_command): Do not call gdbpy_print_stack. (python_command): Ditto. (gdbpy_print_stack): Rewrite to use new enum constants. (maint_set_python): Remove function. (maint_show_python): Ditto. (_initialize_python): Do not add "maint" commands. Add "set/show python print-stack commands". * NEWS: Update to reflect removal for "maint set/show print-stack" 2011-12-16 Phil Muldoon <pmuldoon@redhat.com> * doc/gdb.texinfo (Python Commands): Remove "maint set/show print stack". Add documentation for "set/show python print-stack".
This commit is contained in:
parent
b93a1992f4
commit
80b6e7564f
@ -1,3 +1,16 @@
|
||||
2011-12-16 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* python/python.c: Define python_excp_enums.
|
||||
(eval_python_from_control_command): Do not call gdbpy_print_stack.
|
||||
(python_command): Ditto.
|
||||
(gdbpy_print_stack): Rewrite to use new enum constants.
|
||||
(maint_set_python): Remove function.
|
||||
(maint_show_python): Ditto.
|
||||
(_initialize_python): Do not add "maint" commands. Add "set/show
|
||||
python print-stack commands".
|
||||
* NEWS: Update to reflect removal for "maint set/show
|
||||
print-stack"
|
||||
|
||||
2011-12-15 Doug Evans <dje@google.com>
|
||||
|
||||
* exceptions.c (catcher_list_size): New function.
|
||||
|
7
gdb/NEWS
7
gdb/NEWS
@ -31,9 +31,10 @@
|
||||
existing one.
|
||||
|
||||
** The "maint set python print-stack on|off" command has been
|
||||
deprecated, and a new command: "set python print-stack on|off" has
|
||||
replaced it. Additionally, the default for "print-stack" is now
|
||||
"off".
|
||||
removed. A new command: "set python print-stack
|
||||
none|full|message" has replaced it. Additionally, the default
|
||||
for "print-stack" is now "message", which just prints the error
|
||||
message without the stack trace.
|
||||
|
||||
** A prompt substitution hook (prompt_hook) is now available to the
|
||||
Python API.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-12-16 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* doc/gdb.texinfo (Python Commands): Remove "maint set/show print
|
||||
stack". Add documentation for "set/show python print-stack".
|
||||
|
||||
2011-12-14 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Implementing a Remote Stub): Explain that you
|
||||
|
@ -21447,18 +21447,14 @@ End with a line saying just "end".
|
||||
23
|
||||
@end smallexample
|
||||
|
||||
@kindex maint set python print-stack
|
||||
@item maint set python print-stack
|
||||
This command is now deprecated. Instead use @code{set python
|
||||
print-stack}
|
||||
|
||||
@kindex set python print-stack
|
||||
@item set python print-stack
|
||||
By default, @value{GDBN} will not print a stack trace when an error
|
||||
occurs in a Python script. This can be controlled using @code{set
|
||||
python print-stack}: if @code{on}, then Python stack printing is
|
||||
enabled; if @code{off}, the default, then Python stack printing is
|
||||
disabled.
|
||||
By default, @value{GDBN} will print only the message component of a
|
||||
Python exception when an error occurs in a Python script. This can be
|
||||
controlled using @code{set python print-stack}: if @code{full}, then
|
||||
full Python stack printing is enabled; if @code{none}, then Python stack
|
||||
and message printing is disabled; if @code{message}, the default, only
|
||||
the message component of the error is printed.
|
||||
@end table
|
||||
|
||||
It is also possible to execute a Python script from the @value{GDBN}
|
||||
|
@ -35,9 +35,25 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/* True if we should print the stack when catching a Python error,
|
||||
false otherwise. */
|
||||
static int gdbpy_should_print_stack = 0;
|
||||
/* Declared constants and enum for python stack printing. */
|
||||
static const char python_excp_none[] = "none";
|
||||
static const char python_excp_full[] = "full";
|
||||
static const char python_excp_message[] = "message";
|
||||
|
||||
/* "set python print-stack" choices. */
|
||||
static const char *python_excp_enums[] =
|
||||
{
|
||||
python_excp_none,
|
||||
python_excp_full,
|
||||
python_excp_message,
|
||||
NULL
|
||||
};
|
||||
|
||||
/* The exception printing variable. 'full' if we want to print the
|
||||
error message and stack, 'none' if we want to print nothing, and
|
||||
'message' if we only want to print the error message. 'message' is
|
||||
the default. */
|
||||
static const char *gdbpy_should_print_stack = python_excp_message;
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
|
||||
@ -233,10 +249,7 @@ eval_python_from_control_command (struct command_line *cmd)
|
||||
ret = PyRun_SimpleString (script);
|
||||
xfree (script);
|
||||
if (ret)
|
||||
{
|
||||
gdbpy_print_stack ();
|
||||
error (_("Error while executing Python code."));
|
||||
}
|
||||
|
||||
do_cleanups (cleanup);
|
||||
}
|
||||
@ -258,11 +271,8 @@ python_command (char *arg, int from_tty)
|
||||
if (arg && *arg)
|
||||
{
|
||||
if (PyRun_SimpleString (arg))
|
||||
{
|
||||
gdbpy_print_stack ();
|
||||
error (_("Error while executing Python code."));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
struct command_line *l = get_command_line (python_control, "");
|
||||
@ -881,13 +891,20 @@ gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
/* Print a python exception trace, or print nothing and clear the
|
||||
python exception, depending on gdbpy_should_print_stack. Only call
|
||||
this if a python exception is set. */
|
||||
/* Print a python exception trace, print just a message, or print
|
||||
nothing and clear the python exception, depending on
|
||||
gdbpy_should_print_stack. Only call this if a python exception is
|
||||
set. */
|
||||
void
|
||||
gdbpy_print_stack (void)
|
||||
{
|
||||
if (gdbpy_should_print_stack)
|
||||
/* Print "none", just clear exception. */
|
||||
if (gdbpy_should_print_stack == python_excp_none)
|
||||
{
|
||||
PyErr_Clear ();
|
||||
}
|
||||
/* Print "full" message and backtrace. */
|
||||
else if (gdbpy_should_print_stack == python_excp_full)
|
||||
{
|
||||
PyErr_Print ();
|
||||
/* PyErr_Print doesn't necessarily end output with a newline.
|
||||
@ -895,8 +912,34 @@ gdbpy_print_stack (void)
|
||||
printf_filtered. */
|
||||
begin_line ();
|
||||
}
|
||||
/* Print "message", just error print message. */
|
||||
else
|
||||
PyErr_Clear ();
|
||||
{
|
||||
PyObject *ptype, *pvalue, *ptraceback;
|
||||
char *msg = NULL, *type = NULL;
|
||||
|
||||
PyErr_Fetch (&ptype, &pvalue, &ptraceback);
|
||||
|
||||
/* Fetch the error message contained within ptype, pvalue. */
|
||||
msg = gdbpy_exception_to_string (ptype, pvalue);
|
||||
type = gdbpy_obj_to_string (ptype);
|
||||
if (msg == NULL)
|
||||
{
|
||||
/* An error occurred computing the string representation of the
|
||||
error message. */
|
||||
fprintf_filtered (gdb_stderr,
|
||||
_("Error occurred computing Python error" \
|
||||
"message.\n"));
|
||||
}
|
||||
else
|
||||
fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n",
|
||||
type, msg);
|
||||
|
||||
Py_XDECREF (ptype);
|
||||
Py_XDECREF (pvalue);
|
||||
Py_XDECREF (ptraceback);
|
||||
xfree (msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1062,33 +1105,11 @@ gdbpy_breakpoint_has_py_cond (struct breakpoint_object *bp_obj)
|
||||
|
||||
|
||||
|
||||
/* Lists for 'maint set python' commands. */
|
||||
|
||||
static struct cmd_list_element *maint_set_python_list;
|
||||
static struct cmd_list_element *maint_show_python_list;
|
||||
|
||||
/* Lists for 'set python' commands. */
|
||||
|
||||
static struct cmd_list_element *user_set_python_list;
|
||||
static struct cmd_list_element *user_show_python_list;
|
||||
|
||||
/* Function for use by 'maint set python' prefix command. */
|
||||
|
||||
static void
|
||||
maint_set_python (char *args, int from_tty)
|
||||
{
|
||||
help_list (maint_set_python_list, "maintenance set python ",
|
||||
class_deprecated, gdb_stdout);
|
||||
}
|
||||
|
||||
/* Function for use by 'maint show python' prefix command. */
|
||||
|
||||
static void
|
||||
maint_show_python (char *args, int from_tty)
|
||||
{
|
||||
cmd_show_list (maint_show_python_list, from_tty, "");
|
||||
}
|
||||
|
||||
/* Function for use by 'set python' prefix command. */
|
||||
|
||||
static void
|
||||
@ -1138,33 +1159,6 @@ This command is only a placeholder.")
|
||||
#endif /* HAVE_PYTHON */
|
||||
);
|
||||
|
||||
add_prefix_cmd ("python", no_class, maint_show_python,
|
||||
_("Prefix command for python maintenance settings."),
|
||||
&maint_show_python_list, "maintenance show python ", 0,
|
||||
&maintenance_show_cmdlist);
|
||||
add_prefix_cmd ("python", no_class, maint_set_python,
|
||||
_("Prefix command for python maintenance settings."),
|
||||
&maint_set_python_list, "maintenance set python ", 0,
|
||||
&maintenance_set_cmdlist);
|
||||
|
||||
add_setshow_boolean_cmd ("print-stack", class_maintenance,
|
||||
&gdbpy_should_print_stack, _("\
|
||||
Enable or disable printing of Python stack dump on error."), _("\
|
||||
Show whether Python stack will be printed on error."), _("\
|
||||
Enables or disables printing of Python stack traces."),
|
||||
NULL, NULL,
|
||||
&maint_set_python_list,
|
||||
&maint_show_python_list);
|
||||
|
||||
/* Deprecate maint set/show python print-stack in favour of
|
||||
non-maintenance alternatives. */
|
||||
cmd_name = "print-stack";
|
||||
cmd = lookup_cmd (&cmd_name, maint_set_python_list, "", -1, 0);
|
||||
deprecate_cmd (cmd, "set python print-stack");
|
||||
cmd_name = "print-stack"; /* Reset name. */
|
||||
cmd = lookup_cmd (&cmd_name, maint_show_python_list, "", -1, 0);
|
||||
deprecate_cmd (cmd, "show python print-stack");
|
||||
|
||||
/* Add set/show python print-stack. */
|
||||
add_prefix_cmd ("python", no_class, user_show_python,
|
||||
_("Prefix command for python preference settings."),
|
||||
@ -1176,11 +1170,13 @@ Enables or disables printing of Python stack traces."),
|
||||
&user_set_python_list, "set python ", 0,
|
||||
&setlist);
|
||||
|
||||
add_setshow_boolean_cmd ("print-stack", no_class,
|
||||
add_setshow_enum_cmd ("print-stack", no_class, python_excp_enums,
|
||||
&gdbpy_should_print_stack, _("\
|
||||
Enable or disable printing of Python stack dump on error."), _("\
|
||||
Show whether Python stack will be printed on error."), _("\
|
||||
Enables or disables printing of Python stack traces."),
|
||||
Set mode for Python stack dump on error."), _("\
|
||||
Show the mode of Python stack printing on error."), _("\
|
||||
none == no stack or message will be printed.\n\
|
||||
full == a message and a stack will be printed.\n\
|
||||
message == an error message without a stack will be printed."),
|
||||
NULL, NULL,
|
||||
&user_set_python_list,
|
||||
&user_show_python_list);
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-12-16 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* testsuite/gdb.python/py-function.exp: Change "on" to "full" for
|
||||
python print-stack. Add set/show python print-stack
|
||||
off|full|message tests.
|
||||
|
||||
2011-12-15 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* gdb.trace/strace.c: New
|
||||
|
@ -93,7 +93,7 @@ gdb_py_test_multiple "Test Normal Error" \
|
||||
"NormalError ()" "" \
|
||||
"end" ""
|
||||
|
||||
gdb_test_no_output "set python print-stack on"
|
||||
gdb_test_no_output "set python print-stack full"
|
||||
gdb_test "print \$normalerror()" "Traceback.*File.*line 5.*in invoke.*RuntimeError.*This is a Normal Error.*" \
|
||||
"Test a Runtime error. There should be a stack trace."
|
||||
|
||||
|
@ -97,7 +97,7 @@ proc run_lang_tests {exefile lang} {
|
||||
gdb_test_no_output "python pp_ls_encoding = 'UTF-8'"
|
||||
gdb_test "print estring2" "\"embedded \", <incomplete sequence \\\\302>"
|
||||
|
||||
gdb_test_no_output "set python print-stack on"
|
||||
gdb_test_no_output "set python print-stack full"
|
||||
gdb_test "print hint_error" "Exception: hint failed\r\nhint_error_val"
|
||||
|
||||
gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}"
|
||||
|
@ -195,20 +195,15 @@ gdb_test "python gdb.write(\"Error stream\\n\", stream=gdb.STDERR)" "Error strea
|
||||
gdb_test "python gdb.write(\"Normal stream\\n\", stream=gdb.STDOUT)" "Normal stream" "Test stdout write"
|
||||
gdb_test "python gdb.write(\"Log stream\\n\", stream=gdb.STDLOG)" "Log stream" "Test stdlog write"
|
||||
|
||||
# Deprecate maint set/show python print-stack
|
||||
gdb_test "maint show python print-stack" \
|
||||
"Warning: command 'maintenance show python print-stack' is deprecated.*Use 'show python print-stack'.*" \
|
||||
"Test deprecation maint show warning."
|
||||
gdb_test "maint set python print-stack off" \
|
||||
"Warning: command 'maintenance set python print-stack' is deprecated.*Use 'set python print-stack'.*" \
|
||||
"Test deprecation maint set warning."
|
||||
# print-stack
|
||||
gdb_test "show python print-stack" \
|
||||
"Whether Python stack will be printed on error is off.*" \
|
||||
"Test print-backtrace show setting. Default off."
|
||||
gdb_py_test_silent_cmd "set python print-stack on" \
|
||||
"The mode of Python stack printing on error is \"message\".*" \
|
||||
"Test print-backtrace show setting. Default is message."
|
||||
gdb_py_test_silent_cmd "set python print-stack full" \
|
||||
"Test print-backtrace set setting" 1
|
||||
gdb_test "show python print-stack" \
|
||||
"Whether Python stack will be printed on error is on.*" \
|
||||
"The mode of Python stack printing on error is \"full\".*" \
|
||||
"Test print-backtrace show setting to full."
|
||||
|
||||
# Test prompt substituion
|
||||
|
||||
@ -313,7 +308,63 @@ gdb_test_multiple "set extended-prompt \\w " \
|
||||
|
||||
gdb_test_multiple "set extended-prompt some param \\p{python print-stack} " \
|
||||
"set extended prompt parameter" {
|
||||
-re "\[\r\n\]some param True $" {
|
||||
-re "\[\r\n\]some param full $" {
|
||||
pass "set extended prompt parameter"
|
||||
}
|
||||
}
|
||||
|
||||
# Start with a fresh gdb.
|
||||
clean_restart ${testfile}
|
||||
|
||||
# The following tests require execution.
|
||||
|
||||
if ![runto_main] then {
|
||||
fail "Can't run to main"
|
||||
return 0
|
||||
}
|
||||
|
||||
# print-stack settings
|
||||
gdb_test "show python print-stack" \
|
||||
"The mode of Python stack printing on error is \"message\".*" \
|
||||
"Test print-backtrace show setting. Default is message."
|
||||
gdb_py_test_silent_cmd "set python print-stack full" \
|
||||
"Test print-backtrace set setting" 1
|
||||
gdb_test "show python print-stack" \
|
||||
"The mode of Python stack printing on error is \"full\".*" \
|
||||
"Test print-backtrace show setting to full."
|
||||
gdb_py_test_silent_cmd "set python print-stack none" \
|
||||
"Test print-backtrace set setting" 1
|
||||
gdb_test "show python print-stack" \
|
||||
"The mode of Python stack printing on error is \"none\".*" \
|
||||
"Test print-backtrace show setting to none."
|
||||
|
||||
gdb_py_test_silent_cmd "set python print-stack message" \
|
||||
"Test print-backtrace set setting" 1
|
||||
|
||||
gdb_py_test_multiple "prompt substitution readline" \
|
||||
"python" "" \
|
||||
"pCounter = 0" "" \
|
||||
"def error_prompt(current):" "" \
|
||||
" raise RuntimeError(\"Python exception called\")" "" \
|
||||
"end" ""
|
||||
|
||||
gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
|
||||
-re "Python Exception <type 'exceptions.RuntimeError'> Python exception called.*" {
|
||||
pass "set hook"
|
||||
}
|
||||
}
|
||||
|
||||
gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
|
||||
"set the hook to default" 1
|
||||
|
||||
gdb_py_test_silent_cmd "set python print-stack full" \
|
||||
"Test print-backtrace set setting" 1
|
||||
|
||||
gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
|
||||
-re "Traceback.*File.*line.*RuntimeError.*Python exception called.*" {
|
||||
pass "set hook"
|
||||
}
|
||||
}
|
||||
|
||||
gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
|
||||
"set the hook to default" 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user