aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.python/py-events.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.python/py-events.exp')
-rw-r--r--gdb/testsuite/gdb.python/py-events.exp53
1 files changed, 51 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp
index 7891524..529eeeb 100644
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -282,21 +282,70 @@ with_test_prefix "inferior continue exit" {
}
# Check that when GDB exits, we see gdb.ExitedEvent objects with no
-# 'exit_code' attribute.
-with_test_prefix "gdb exiting" {
+# 'exit_code' attribute, and that a gdb.GdbExitingEvent is emitted.
+with_test_prefix "gdb exiting: normal" {
+ gdb_test "test-exiting-event normal" "GDB exiting event registered\\."
+
+ set saw_exiting_event 0
set saw_inferior_exit 0
gdb_test_multiple "quit" "" {
-re "Quit anyway\\? \\(y or n\\) $" {
send_gdb "y\n"
exp_continue
}
+ -re "event type: gdb-exiting\r\nexit code: $decimal" {
+ incr saw_exiting_event
+ exp_continue
+ }
-re "event type: exit\r\nexit code: not-present\r\nexit inf: $decimal\r\nexit pid: $decimal\r\ndir ok: False\r\n" {
incr saw_inferior_exit
exp_continue
}
eof {
+ gdb_assert { $saw_exiting_event == 1 }
gdb_assert { $saw_inferior_exit == 2 }
pass $gdb_test_name
}
}
}
+
+# Check that if the GdbExitingEvent raises an exception then this
+# doesn't impact GDB's exit process.
+with_test_prefix "gdb exiting: error" {
+ clean_restart ${testfile}
+
+ if ![runto_main] then {
+ fail "cannot run to main."
+ return 0
+ }
+
+ gdb_test_no_output "source ${pyfile}" "load python file"
+ gdb_test "test-exiting-event error" "GDB exiting event registered\\."
+ gdb_test "test-events" "Event testers registered\\."
+
+ set saw_exiting_error 0
+ set saw_inferior_exit 0
+ gdb_test_multiple "quit" "" {
+ -re "Quit anyway\\? \\(y or n\\) $" {
+ send_gdb "y\n"
+ exp_continue
+ }
+ -re "event type: gdb-exiting\r\nexit code: $decimal" {
+ fail "$gdb_test_name XXXX"
+ exp_continue
+ }
+ -re "Python Exception <class 'gdb.GdbError'>: error from gdb_exiting_handler\r\n" {
+ incr saw_exiting_error
+ exp_continue
+ }
+ -re "event type: exit\r\nexit code: not-present\r\nexit inf: $decimal\r\nexit pid: $decimal\r\ndir ok: False\r\n" {
+ incr saw_inferior_exit
+ exp_continue
+ }
+ eof {
+ gdb_assert { $saw_inferior_exit == 1 }
+ gdb_assert { $saw_exiting_error == 1 }
+ pass $gdb_test_name
+ }
+ }
+}