Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Joel Brobecker <brobecker@gnat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFA/testsuite] Workaround timeout in default.exp
Date: Fri, 21 May 2004 01:31:00 -0000	[thread overview]
Message-ID: <20040521013147.GA19027@nevyn.them.org> (raw)
In-Reply-To: <20040521011443.GG10684@gnat.com>

On Thu, May 20, 2004 at 06:14:43PM -0700, Joel Brobecker wrote:
> > If you're trying to debug expect matching, I recommend "exp_internal 1"
> > before the block (and maybe "exp_internal 0" after).  That will let you
> > see exactly what's going on, and why my crackpot theory is wrong :)
> 
> Nice command, that really helped understand better what was going on.
> 
> Roughly, it seems that what is hurting us is that expect is eating up
> the output from GDB reeeaaaal slooooowwww. Not expect's fault, I imagine,
> but by counting characters in the first few iterations, it looks like
> expect gets the output 12-15 characters at a time. It takes a total
> of 113 reads to fetch the entire command output, which contains ~9000
> characters, which makes around 80 chars per read.
> 
> And from watching it run and spit the expect debug data, it seems as if
> expect is getting slower and slower at each iteration. It looks like an
> algorithm that's not linear, but something exponential instead.
> 
> As an experiment, I tried increasing the timeout value to 600secs,
> and the test did complete successfully... After 18mins!
> 
> It seemed to be slowing down on the evaluation of one specific regexp:
> 
>         ".*\(gdb\) $"? no

So, it sounds like that's the problem.  I don't know why expect would
behave this terribly, but I do know something else: the regular
expression is not front-anchored.  So the leading .* does nothing.  You
may as well try removing it.  I bet that will also fix the speed
problem.

[I think there should be a \r\n in front of the "$gdb_prompt $" anyway,
don't you?  Wouldn't that fix the related problem?  Please try
replacing that pattern with "\r\n$gdb_prompt $".]

> So I uncommented it in gdb_test_multiple as follow, just to see what
> effect it would have:
> 
>         #  -re ".*$gdb_prompt $" {
>         #     if ![string match "" $message] then {
>         #       fail "$message"
>         #     }
>         #     set result 1
>         # }
> 
> You are going to be surprised. That specific test takes less than 40secs
> to run. The whole default.exp test takes a total of 1mn45secs.
> 
> And what's curious, even after have is that I still see expect try the
> same regexp. Before commenting out the code above, the sequence of
> regexp evaluations looked like:
> 
>         "Undefined[a-z]* command:.*\(gdb\) $"? no
>         "Ambiguous command.*\(gdb\) $"? no
>         "Program exited with code [0-9]+.*\(gdb\) $"? no
>         "EXIT code [0-9\r\n]+Program exited normally.*\(gdb\) $"? no
>         "The program is not being run.*\(gdb\) $"? no
>         ".*\(gdb\) $"? no
>         "<return>"? no
>         "\(y or n\) "? no
> 
> After, it was slightly transformed into:
> 
>         "Undefined[a-z]* command:.*\(gdb\) $"? no
>         "Ambiguous command.*\(gdb\) $"? no
>         "Program exited with code [0-9]+.*\(gdb\) $"? no
>         "EXIT code [0-9\r\n]+Program exited normally.*\(gdb\) $"? no
>         "The program is not being run.*\(gdb\) $"? no
>         "#"? no
>         ".*\(gdb\) $"? no
>         "<return>"? no
>         "\(y or n\) "? no
> 
> At this point, no comprendo anymore... :-/
> (where does the "#" come from, and why is the gdb_prompt check
> still there?)

'#' doesn't do what you think it does.

First of all, it is not an element of TCL syntax.  It's just a command
which does nothing.  Secondly, as a consequence, you can't use it where
you aren't expecting commands.  So what you did was match "#" {action
body is "-re"}, and then ".*\(gdb\) $" {note that there's no leading
-re now, so it is treated as an exact match instead of a regular
expression!}.

-- 
Daniel Jacobowitz


  reply	other threads:[~2004-05-21  1:31 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-18 21:01 Joel Brobecker
2004-05-18 21:42 ` Daniel Jacobowitz
2004-05-20  1:48   ` Joel Brobecker
2004-05-20  2:27     ` Daniel Jacobowitz
2004-05-21  1:14       ` Joel Brobecker
2004-05-21  1:31         ` Daniel Jacobowitz [this message]
2004-05-21  1:43           ` Joel Brobecker
2004-05-21  6:58             ` Jim Blandy
2004-05-21 16:10               ` Joel Brobecker
     [not found]           ` <20040521160554.GK10684@gnat.com>
2004-05-21 16:36             ` Daniel Jacobowitz
2004-05-21 17:28               ` Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040521013147.GA19027@nevyn.them.org \
    --to=drow@false.org \
    --cc=brobecker@gnat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox