This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: add testsuite function for answering internal error questions


Jim, sorry for the delay. I had some e-mail problems.

The idea is excellent, we should have thought of this before.
I need you to make a couple of changes before checking it in, if you don't mind:

1)
fail "$testname (internal error resync timeout)"
should actually be
perror "Could not resync from internal error (timeout)"

It is a test harness failure if we were not able to resync and GDB cannot be no lonmger used for testing. This will properly make all tests to be unresolved until gdb is restarted.

Note that I've also got ridden of the TESTNAME argument as well. The test itself has been marked as failed already since an internal error was raised. We we fail to resynch we can just issue a constant message like:

ERROR: Could not resync from internal error (timeout)



2) Please get rid of the global variable. You can just do:

> + -re ".*A problem internal to GDB has been detected" {
> + # The pattern above must be set up to match the
> + # internal error message, but none of the questions
> + # that follow it
> + fail "$message"
> + gdb_internal_error_resync
> + }



Thank you very much for the wonderful idea and for the patch.

Best regards,
Fernando


Jim Blandy wrote:
[re-posting: bad changelog entry.]

2002-11-06 Jim Blandy <jimb@redhat.com>

* lib/gdb.exp (gdb_internal_error_regexp): New variable.
(gdb_internal_error_resync): New procedure.
(gdb_test): If the command results in an internal error,
answer GDB's questions until we get back to a prompt.

Index: gdb/testsuite/lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.27
diff -c -r1.27 gdb.exp
*** gdb/testsuite/lib/gdb.exp 18 Sep 2002 15:34:10 -0000 1.27
--- gdb/testsuite/lib/gdb.exp 6 Nov 2002 20:21:58 -0000
***************
*** 370,375 ****
--- 370,425 ----
}
+ # A regular expression matching the output GDB produces when it
+ # reports an internal error.
+ set gdb_internal_error_regexp ".*A problem internal to GDB has been detected"
+ + + # gdb_internal_error_resync TESTNAME
+ #
+ # Answer the questions GDB asks after it reports an internal error
+ # until we get back to a GDB prompt, as part of the test named
+ # TESTNAME. Decline to quit the debugging session, and decline to
+ # create a core file.
+ #
+ # This procedure just answers whatever questions come up until it sees
+ # a GDB prompt; it doesn't require you to have matched the input up to
+ # any specific point. However, it only answers questions it sees in
+ # the output itself, so if you've matched a question, you had better
+ # answer it yourself before calling this.
+ #
+ # The variable `gdb_internal_error_regexp' is set up to match the
+ # internal error message, but none of the questions that follow it, so
+ # you can write code like this:
+ # + # gdb_expect {
+ # ...
+ # -re $gdb_internal_error_regexp {
+ # gdb_internal_error_resync "$message (internal error)"
+ # }
+ # ...
+ # }
+ proc gdb_internal_error_resync {testname} {
+ global gdb_prompt
+ + gdb_expect {
+ -re "Quit this debugging session\\? \\(y or n\\) $" {
+ send_gdb "n\n"
+ exp_continue
+ }
+ -re "Create a core file of GDB\\? \\(y or n\\) $" {
+ send_gdb "n\n"
+ exp_continue
+ }
+ -re "$gdb_prompt $" {
+ # We're resynchronized.
+ }
+ timeout {
+ fail "$testname (internal error resync timeout)"
+ }
+ }
+ }
+ # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE
# Send a command to gdb; test the result.
***************
*** 395,400 ****
--- 445,451 ----
global verbose
global gdb_prompt
global GDB
+ global gdb_internal_error_regexp
upvar timeout timeout
if [llength $args]>2 then {
***************
*** 477,482 ****
--- 528,537 ----
}
}
gdb_expect $tmt {
+ -re $gdb_internal_error_regexp {
+ fail "$message"
+ gdb_internal_error_resync "$message (internal error)"
+ }
-re "\\*\\*\\* DOSEXIT code.*" {
if { $message != "" } {
fail "$message";


--
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]