public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Bruno Larsen <blarsen@redhat.com>
To: Thiago Jung Bauermann <thiago.bauermann@linaro.org>,
	gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>, Tom de Vries <tdevries@suse.de>
Subject: Re: [PATCH v3] gdb/testsuite: Avoid infinite loop in gdb.reverse/step-reverse.exp
Date: Tue, 6 Jun 2023 15:49:39 +0200	[thread overview]
Message-ID: <4cce28ea-a883-7391-daa8-130f9bc553c1@redhat.com> (raw)
In-Reply-To: <20230605232844.80533-1-thiago.bauermann@linaro.org>

On 06/06/2023 01:28, Thiago Jung Bauermann wrote:
> This testcase sometimes gets stuck in a loop for hours when running in our
> CI.  The problem is that due to an issue unrelated to reverse debugging the
> inferior exits early, and because of the overly generic ".*" pattern the
> testcase keeps sending the "next" command without noticing that the
> inferior is gone.
>
> gdb_test_multiple has a pattern to detect that "The program is not being
> run.", but since it is placed after the patterns from the caller it won't
> be triggered.  It also has a timeout pattern but because it is triggered
> between successful matches, each time the test matches the '-re -wrap ".*"'
> this counts as a successful match and the timeout is reset.
>
> Since the test binary is compiled with debug information, fix by changing
> one of the generic patterns to match entering the main function and the
> other one to match the source code line number that is shown by GDB right
> after the "step" command.
>
> Also, as a precaution add a maximum number of times the "next" command will
> be sent.
>
> Co-Authored-By: Tom de Vries <tdevries@suse.de>
> ---

Thanks for fixing all the nits, looks good to me now. Reviewed-By: Bruno 
Larsen <blarsen@redhat.com>

(Just making sure you know, the rb tag is not enough to push, you need 
an approval)

-- 
Cheers,
Bruno

>
> Changes since v2:
> - Put "^main" in the correct re in "$step_out == 1" case (pointed out by Bruno).
>
> Changes since v1:
> - Added maximum number of iterations (code provided by Tom).
> - Changed one of the patterns to match the main function (suggested by Bruno).
> - Clarified why the timeout pattern isn't effective (explanation from Andrew).
>
> Tom,
>
> Most of the patch now is the iteration-counting code. Since I copied it
> from your email, I thought it made sense to record you as co-author.
> I hope it's ok.
>
>   gdb/testsuite/gdb.reverse/step-reverse.exp | 28 +++++++++++++++++++---
>   1 file changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.reverse/step-reverse.exp b/gdb/testsuite/gdb.reverse/step-reverse.exp
> index 729218d4cb8c..4b78a8f8fb75 100644
> --- a/gdb/testsuite/gdb.reverse/step-reverse.exp
> +++ b/gdb/testsuite/gdb.reverse/step-reverse.exp
> @@ -247,6 +247,7 @@ gdb_test_multiple "step" "$test_message" {
>   gdb_test "next" ".*NEXT OVER THIS CALL.*" "reverse next over call"
>   
>   set step_out 0
> +set max_iterations 1000
>   gdb_test_multiple "next" "reverse next over recursion" {
>       -re -wrap ".*NEXT OVER THIS RECURSION.*" {
>   	pass "$gdb_test_name"
> @@ -257,11 +258,19 @@ gdb_test_multiple "next" "reverse next over recursion" {
>       }
>   }
>   if { "$step_out" == 1 } {
> +    set iterations 0
>       gdb_test_multiple "next" "stepping out of recursion" {
> -	-re -wrap "NEXT OVER THIS RECURSION.*" {
> +	-re -wrap "^main.*NEXT OVER THIS RECURSION.*" {
>   	    set step_out 0
> +	    pass "$gdb_test_name"
>   	}
> -	-re -wrap ".*" {
> +	-re -wrap "^\[0-9\].*" {
> +	    incr iterations
> +	    if { $iterations == $max_iterations } {
> +		fail "$gdb_test_name (reached $max_iterations iterations)"
> +		return
> +	    }
> +
>   	    send_gdb "next\n"
>   	    exp_continue
>   	}
> @@ -276,9 +285,16 @@ gdb_test_no_output "set exec-dir reverse" "reverse again to test recursion"
>   
>   gdb_test "step" ".*EXIT RECURSIVE FUNCTION.*" "enter recursive function"
>   set seen_recursive_call 0
> +set iterations 0
>   gdb_test_multiple "next" "step over recursion inside the recursion" {
>       -re -wrap ".*RECURSIVE CALL.*" {
>   	incr seen_recursive_call
> +	incr iterations
> +	if { $iterations == $max_iterations } {
> +	    fail "$gdb_test_name (reached $max_iterations iterations)"
> +	    return
> +	}
> +
>   	send_gdb "next\n"
>   	exp_continue
>       }
> @@ -286,7 +302,13 @@ gdb_test_multiple "next" "step over recursion inside the recursion" {
>   	gdb_assert {"$seen_recursive_call" == 1} \
>   	    "step over recursion inside the recursion"
>       }
> -    -re -wrap ".*" {
> +    -re -wrap "^\[0-9\].*" {
> +	incr iterations
> +	if { $iterations == $max_iterations } {
> +	    fail "$gdb_test_name (reached $max_iterations iterations)"
> +	    return
> +	}
> +
>   	send_gdb "next\n"
>   	exp_continue
>       }
>
> base-commit: 3c5e824b9cee93a987a77906240c509add260a0d
>


  reply	other threads:[~2023-06-06 13:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-05 23:28 Thiago Jung Bauermann
2023-06-06 13:49 ` Bruno Larsen [this message]
2023-06-22 22:52   ` Thiago Jung Bauermann
2023-06-23 11:36     ` Tom de Vries
2023-06-23 21:09       ` Thiago Jung Bauermann

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=4cce28ea-a883-7391-daa8-130f9bc553c1@redhat.com \
    --to=blarsen@redhat.com \
    --cc=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tdevries@suse.de \
    --cc=thiago.bauermann@linaro.org \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).