| # connect gdb to Valgrind gdbserver: |
| target remote | ./vgdb --wait=60 --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue |
| echo vgdb launched process attached\n |
| monitor v.set vgdb-error 999999 |
| # |
| # |
| # simulate control-c 1 second after having seen sleepers program outputting 'main' |
| shell ./simulate_control_c --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue 1 grep main nlvgdbsigqueue.stderr.out |
| # |
| # send SIGUSR1/SIGUSR1 in a few seconds, after vgdb has attached |
| # vgdb will attach when it will receive the control-c |
| shell ./send_signal USR1 --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue 0 grep attachedwaitingforsigusr1 nlvgdbsigqueue.stdoutB.out |
| shell ./send_signal USR1 --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue 1 grep attachedwaitingforsigusr1 nlvgdbsigqueue.stdoutB.out |
| # |
| echo continuing to have vgdb interrupted by simulate_control_c\n |
| continue |
| # |
| # Now vgdb should have received the interrupt, and so has |
| # attached to the sleeping process. |
| # wait for the USR sig to be sent, that will be queued by vgdb. |
| echo attachedwaitingforsigusr1\n |
| # send_signal tries every second the guardcmd |
| # so we must now wait to be (somewhat) sure the 2 SIGUSR1 are emitted |
| shell sleep 4 |
| # continue, so as to have vgdb sending queued signals when PTRACE_DETACHing |
| echo continuing to receive first SIGUSR1\n |
| continue |
| # simulate a control c to afterwards stop the execution |
| shell ./simulate_control_c --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue 1 |
| echo continuing to receive second SIGUSR1\n |
| continue |
| kill |
| quit |