Translate PyExc_KeyboardInterrupt to gdb "quit"
A while back I typed "info pretty-printers" with a large number of printers installed, and I typed "q" to stop the pagination. I noticed that gdb printed a Python exception in this case. It seems to me that, instead, quitting pagination (or control-c'ing a Python command generally) should be handled the same way that gdb normally handles a quit. This patch implements this idea by changing gdbpy_handle_exception to treat PyExc_KeyboardInterrupt specially. gdb/ChangeLog 2018-12-27 Tom Tromey <tom@tromey.com> * python/py-utils.c (gdbpy_handle_exception): Translate PyExc_KeyboardInterrupt to quit. gdb/testsuite/ChangeLog 2018-12-27 Tom Tromey <tom@tromey.com> * gdb.python/py-cmd.exp (test_python_inline_or_multiline): Add pagination test.
This commit is contained in:
parent
6ef2312a17
commit
bc543c902f
4 changed files with 53 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2018-12-27 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/py-utils.c (gdbpy_handle_exception): Translate
|
||||
PyExc_KeyboardInterrupt to quit.
|
||||
|
||||
2018-12-27 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/python-internal.h (gdbpy_print_stack_or_quit): Declare.
|
||||
|
|
|
@ -422,7 +422,9 @@ gdbpy_handle_exception ()
|
|||
for user errors. However, a missing message for gdb.GdbError
|
||||
exceptions is arguably a bug, so we flag it as such. */
|
||||
|
||||
if (! PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
|
||||
if (PyErr_GivenExceptionMatches (ptype, PyExc_KeyboardInterrupt))
|
||||
throw_quit ("Quit");
|
||||
else if (! PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
|
||||
|| msg == NULL || *msg == '\0')
|
||||
{
|
||||
PyErr_Restore (ptype, pvalue, ptraceback);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-12-27 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* gdb.python/py-cmd.exp (test_python_inline_or_multiline): Add
|
||||
pagination test.
|
||||
|
||||
2018-12-24 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.dwarf2/dw2-unusual-field-names.c: New file.
|
||||
|
|
|
@ -261,3 +261,43 @@ if { [readline_is_used] } {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Test that interrupting pagination throws a gdb quit.
|
||||
gdb_test_no_output "set height 10"
|
||||
|
||||
gdb_py_test_multiple "input multi-line-output command" \
|
||||
"python" "" \
|
||||
"class test_mline (gdb.Command):" "" \
|
||||
" \"\"\"Docstring\"\"\"" "" \
|
||||
" def __init__ (self):" "" \
|
||||
" super (test_mline, self).__init__ (\"test_multiline\", gdb.COMMAND_USER)" "" \
|
||||
" def invoke (self, arg, from_tty):" "" \
|
||||
" for f in range(20):" "" \
|
||||
" print (\"test_multiline output\")" "" \
|
||||
"test_mline ()" "" \
|
||||
"end" ""
|
||||
|
||||
set test "verify pagination from test_multiline"
|
||||
gdb_test_multiple "test_multiline" $test {
|
||||
-re "--Type <RET>" {
|
||||
exp_continue
|
||||
}
|
||||
-re " for more, q to quit" {
|
||||
exp_continue
|
||||
}
|
||||
-re ", c to continue without paging--$" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
|
||||
send_gdb "q\n"
|
||||
set test "verify pagination from test_multiline: q"
|
||||
gdb_test_multiple "test_multiline" $test {
|
||||
-re "Error occurred in Python" {
|
||||
fail $test
|
||||
}
|
||||
-re "Quit" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue