This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: How to abort a test?
- From: Simon Marchi <simon dot marchi at ericsson dot com>
- To: Joel Brobecker <brobecker at adacore dot com>
- Cc: Pedro Alves <palves at redhat dot com>, <dejagnu at gnu dot org>, gdb-patches <gdb-patches at sourceware dot org>
- Date: Mon, 18 Jan 2016 11:43:41 -0500
- Subject: Re: How to abort a test?
- Authentication-results: sourceware.org; auth=none
- References: <56958359 dot 8070708 at ericsson dot com> <5697CC09 dot 8010306 at redhat dot com> <5697D721 dot 1000305 at ericsson dot com> <5697DABA dot 8010008 at redhat dot com> <5697FA6C dot 7060703 at ericsson dot com> <5697FB9E dot 3080906 at redhat dot com> <56991FB0 dot 5090109 at ericsson dot com> <20160117082709 dot GC4059 at adacore dot com>
On 16-01-17 03:27 AM, Joel Brobecker wrote:
> I admit that some of it flying a little over my head... Does it
> mean that we will be able to abort a test if we detect a timeout?
> This is one of the things I wanted to do, but didn't have a solution
> for, so it'd be fantastic if it helped with that!
--status does no really impact how a timeout is handled. What happens
when a timeout occurs in gdb_test is defined by us. Right now, it
produces a test "fail":
testsuite/lib/gdb.exp:
937 timeout {
938 if ![string match "" $message] then {
939 fail "$message (timeout)"
940 }
941 set result 1
942 }
So you see, for example:
FAIL: gdb.base/break.exp: some test (timeout)
and the test case carries on. A gdb_test timeout is no different than
a regular fail. If you replace the "fail" at line 939 with "error",
which throws a TCL exception, then the current test case will abort,
although in this quite ugly way:
Running /home/emaisin/src/binutils-gdb/gdb/testsuite/gdb.base/break.exp ...
ERROR OCCURED: some test (timeout)
while executing
"error "$message (timeout)""
invoked from within
"if ![string match "" $message] then {
error "$message (timeout)"
}"
invoked from within
"expect {
-i exp8 -timeout 1
-re ".*A problem internal to GDB has been detected" {
fail "$message (GDB internal error)"
gdb_internal_error_..."
("uplevel" body line 1)
invoked from within
"uplevel $body" NONE insert breakpoint (timeout)WARNING: remote_expect statement without a default case?!
The current test case is stopped and the next .exp is ran. However,
if you don't use --status on the runtest command line, the uncaught
exception will not be considered as an error. So if you use
"make check" in a script, you won't notice the failure.