From: Pedro Alves <palves@redhat.com>
To: "Metzger, Markus T" <markus.t.metzger@intel.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH 13/17] btrace: non-stop
Date: Wed, 09 Sep 2015 13:47:00 -0000 [thread overview]
Message-ID: <55F03852.7030200@redhat.com> (raw)
In-Reply-To: <A78C989F6D9628469189715575E55B23331AB7A1@IRSMSX104.ger.corp.intel.com>
On 09/09/2015 01:20 PM, Metzger, Markus T wrote:
>> -----Original Message-----
>> From: Pedro Alves [mailto:palves@redhat.com]
>> Sent: Wednesday, September 9, 2015 1:54 PM
>> To: Metzger, Markus T
>> Cc: gdb-patches@sourceware.org
>> Subject: Re: [PATCH 13/17] btrace: non-stop
>>
>> On 09/09/2015 11:35 AM, Markus Metzger wrote:
>>
>>> +# make sure $line matches the full expected output per thread.
>>> +# and let's hope that GDB never mixes the output from different threads.
>>> +#
>>> +# this is quite fragile, mostly because the prompt appears somewhere in
>>> +# the middle of the output.
>>> +proc gdb_cont_to { threads cmd line nthreads } {
>>> + global gdb_prompt
>>> + set full_cmd "thread apply $threads $cmd"
>>> + set prompt_seen 0
>>> +
>>> + send_gdb "$full_cmd\n"
>>> +
>>> + for {set i 0} {$i < $nthreads} {incr i} {
>>> + set test "$full_cmd: thread $i"
>>> +
>>> + # check for the prompt. it may be in front of one of the lines we
>>> + # try to match.
>>> + gdb_test_multiple "" "$test: check prompt" {
>>> + -notransfer -re "$gdb_prompt " {
>>> + set prompt_seen 1
>>> + }
>>> + }
>>> +
>>
>> Hmmm. I'm not sure I'm missing some subtlety, but it seems to me
>> that if you used -notransfer, then the prompt will still be in the buffer,
>> and ...
>>
>>> + # check for the line. and for a typical error.
>>> + gdb_test_multiple "" $test {
>>> + -re "Cannot execute this command \[^\\\r\\\n\]* is running\." {
>>> + fail $test
>>> + }
>>> + -re "$line\[^\\\r\\\n\]*\r\n" {
>>> + pass $test
>>> + }
>>> + }
>>
>> ... thus this gdb_test_multiple can trip on it and issue a fail.
>
> As far as I understand expect, the above gdb_test_multiple would
> simply skip the $gdb_prompt at the beginning of the line.
Only if the buffer already holds enough data for the regex to match.
Expect reads data in chunks and puts it in the buffer, and then tries
a match. If nothing matches, it fetches more data, and retries matching.
On an on, until a timeout. So say $line is
[multi_line \
"No more reverse-execution history\." \
"\[^\\\r\\\n\]*" \
"\[^\\\r\\\n\]*" \
]
It sometimes will happen that the expect buffer has:
"$gdb_prompt\r\n...No more reverse-exe"
Because that doesn't match any of the regexs you have, gdb_test_multiple's
internal regex for the prompt matches, and issues a FAIL.
Try "make check-read1". It may well be it catches this.
>
> That's why I'm trying to detect it with a separate gdb_test_multiple
> above. I use -notransfer so I can still analyse the line for the expected
> output.
>
>
>> Wouldn't this instead work?
>>
>> gdb_test_multiple "" $test {
>> -re "Cannot execute this command \[^\\\r\\\n\]* is running\." {
>> fail $test
>> }
>> -re "$line\[^\\\r\\\n\]*\r\n" {
>> pass $test
>> }
>> -re "$gdb_prompt " {
>> set prompt_seen 1
>> exp_continue
>> }
>> }
>
> Wouldn't the 1st or 2nd pattern skip any $gdb_prompt before the pattern?
Yes. Is that a problem? Don't we always get another prompt after that error?
> For the "Cannot execute..." pattern, I could add "^" but this will be difficult
> for the $line pattern.
>
> Does the 3rd pattern consume just the $gdb_prompt or the entire line?
Consumes everything up to the prompt. Whatever follows is left in the buffer.
> This non-stop testing is quite difficult. I also have not found too many
> examples when I searched for "non-stop".
Could you push the series to a branch somewhere? The easiest would be
a users/ branch in the master repo.
Thanks,
Pedro Alves
next prev parent reply other threads:[~2015-09-09 13:47 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-09 10:36 [PATCH 00/17] record btrace: non-stop and ASNS Markus Metzger
2015-09-09 10:35 ` [PATCH 12/17] infrun: switch to NO_HISTORY thread Markus Metzger
2015-09-09 10:35 ` [PATCH 01/17] btrace: fix non-stop check in to_wait Markus Metzger
2015-09-09 10:35 ` [PATCH 14/17] target, record: add PTID argument to to_record_is_replaying Markus Metzger
2015-09-09 10:35 ` [PATCH 08/17] btrace: lock-step Markus Metzger
2015-09-09 10:35 ` [PATCH 10/17] btrace: temporarily set inferior_ptid in record_btrace_start_replaying Markus Metzger
2015-09-09 10:35 ` [PATCH 04/17] btrace: extract the breakpoint check from record_btrace_step_thread Markus Metzger
2015-09-09 10:35 ` [PATCH 05/17] btrace: split record_btrace_step_thread Markus Metzger
2015-09-09 10:35 ` [PATCH 15/17] btrace: allow full memory and register access for non-replaying threads Markus Metzger
2015-09-09 11:57 ` Pedro Alves
2015-09-09 10:35 ` [PATCH 03/17] btrace: improve stepping debugging Markus Metzger
2015-09-09 10:35 ` [PATCH 11/17] btrace: async Markus Metzger
2015-09-09 10:36 ` [PATCH 07/17] btrace: add missing NO_HISTORY Markus Metzger
2015-09-09 10:36 ` [PATCH 17/17] infrun: scheduler-locking reverse Markus Metzger
2015-09-09 13:54 ` Pedro Alves
2015-09-12 19:43 ` Jan Kratochvil
2015-09-15 9:29 ` Metzger, Markus T
2015-09-15 17:19 ` Jan Kratochvil
2015-09-16 7:59 ` Metzger, Markus T
2015-09-16 12:44 ` Metzger, Markus T
2015-09-16 13:23 ` Pedro Alves
2015-09-16 13:21 ` Pedro Alves
2015-09-17 8:39 ` Jan Kratochvil
2015-09-17 8:48 ` Metzger, Markus T
2015-09-17 10:11 ` Eli Zaretskii
2015-09-09 10:36 ` [PATCH 09/17] btrace: resume all requested threads Markus Metzger
2015-09-09 12:06 ` Pedro Alves
2015-09-09 13:06 ` Metzger, Markus T
2015-09-09 10:36 ` [PATCH 13/17] btrace: non-stop Markus Metzger
2015-09-09 11:54 ` Pedro Alves
2015-09-09 12:20 ` Metzger, Markus T
2015-09-09 13:47 ` Pedro Alves [this message]
2015-09-09 14:10 ` Metzger, Markus T
2015-09-09 14:51 ` Pedro Alves
2015-09-10 7:49 ` Metzger, Markus T
2015-09-10 11:05 ` Pedro Alves
2015-09-10 11:19 ` Metzger, Markus T
2015-09-10 11:32 ` Pedro Alves
2015-09-10 11:37 ` Metzger, Markus T
2015-09-10 12:48 ` Pedro Alves
2015-09-09 10:36 ` [PATCH 02/17] btrace: support to_stop Markus Metzger
2015-09-09 10:36 ` [PATCH 06/17] btrace: move breakpoint checking into stepping functions Markus Metzger
2015-09-09 10:36 ` [PATCH 16/17] target: add to_record_stop_replaying target method Markus Metzger
2015-09-09 11:59 ` Pedro Alves
2015-09-09 13:56 ` [PATCH 00/17] record btrace: non-stop and ASNS Pedro Alves
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=55F03852.7030200@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=markus.t.metzger@intel.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