[PATCH 03/12] Testcase for attaching in non-stop mode

Simon Marchi simon.marchi@polymtl.ca
Wed Jan 13 05:09:31 GMT 2021


On 2021-01-12 8:15 p.m., Pedro Alves wrote:
> diff --git a/gdb/testsuite/gdb.threads/attach-non-stop.exp b/gdb/testsuite/gdb.threads/attach-non-stop.exp
> new file mode 100644
> index 00000000000..96b95b764d7
> --- /dev/null
> +++ b/gdb/testsuite/gdb.threads/attach-non-stop.exp
> @@ -0,0 +1,149 @@
> +# Copyright 2021 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# Test attaching to a multi-threaded process, in all combinations of:
> +#
> +#  - set non-stop on/off
> +#  - maint target non-stop off/on
> +#  - "attach" vs "attach &"
> +
> +if {![can_spawn_for_attach]} {
> +    return 0
> +}
> +
> +standard_testfile
> +
> +# The test proper.  See description above.
> +
> +proc test {target_non_stop non_stop cmd} {
> +    global binfile srcfile
> +    global gdb_prompt
> +    global decimal
> +    global GDBFLAGS
> +
> +    # Number of threads started by the program.
> +    set n_threads 10
> +
> +    save_vars { GDBFLAGS } {
> +	append GDBFLAGS " -ex \"maint set target-non-stop $target_non_stop\""
> +	append GDBFLAGS " -ex \"set non-stop $non_stop\""
> +	clean_restart $binfile
> +    }
> +
> +    set test_spawn_id [spawn_wait_for_attach $binfile]
> +    set testpid [spawn_id_get_pid $test_spawn_id]
> +
> +    set attached 0
> +    set test "attach"
> +    set any "\[^\r\n\]*"
> +
> +    if {$cmd == "attach"} {
> +	gdb_test_multiple "attach $testpid" $test {
> +	    -re "Attaching to program:${any}process $testpid\r\n.*$gdb_prompt " {
> +		pass $test
> +		set attached 1
> +	    }
> +	}
> +
> +	if {!$attached} {
> +	    kill_wait_spawned_process $test_spawn_id
> +	    return
> +	}
> +
> +	if {$non_stop} {
> +	    # In non-stop, we will see one stop per thread after
> +	    # the prompt.
> +	    set stops 0
> +	    set test "seen all stops"
> +	    for {set thread 1} { $thread <= $n_threads } { incr thread } {
> +		gdb_test_multiple "" $test {
> +		    -re "Thread $::decimal ${any} stopped" {
> +			incr stops
> +		    }
> +		}
> +	    }
> +
> +	    # This we haven't seen all stops, then the

This sentence is weird.

Otherwise, the patch LGTM.

Simon


More information about the Gdb-patches mailing list