[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