From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19102 invoked by alias); 11 Apr 2016 14:04:06 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 19088 invoked by uid 89); 11 Apr 2016 14:04:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=nicer, Hx-languages-length:2426 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 11 Apr 2016 14:03:59 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 90EAF47048; Mon, 11 Apr 2016 14:03:58 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u3BE3vZV007096; Mon, 11 Apr 2016 10:03:58 -0400 Subject: Re: [PATCH 1/7] New test case gdb.trace/signal.exp To: Yao Qi References: <1458749384-19793-1-git-send-email-yao.qi@linaro.org> <1458749384-19793-2-git-send-email-yao.qi@linaro.org> <5707E1CC.2010609@redhat.com> <86a8l0leqy.fsf@gmail.com> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: <570BAECD.30508@redhat.com> Date: Mon, 11 Apr 2016 14:04:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: <86a8l0leqy.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-04/txt/msg00206.txt.bz2 On 04/11/2016 09:40 AM, Yao Qi wrote: > +# Record the hit times of each tracepoint in this array. > +array set tracepoint_hits { } > + > +set test "tfind 0" > +gdb_test_multiple $test $test { Why do we need this separate "tfind 0" step? I'd think the "tfind" loop below would be sufficient? > + -re "Found trace frame 0, tracepoint ($decimal).*\r\n$gdb_prompt $" { > + > + set idx [expr $expect_out(1,string)] > + > + if {[info exists tracepoint_hits($idx)]} { > + incr tracepoint_hits($idx) > + } else { > + set tracepoint_hits($idx) 1 > + } > + } > +} > + > +set loop 1 > +while { $loop } { > + set test "tfind" > + gdb_test_multiple $test $test { > + -re "Found trace frame $decimal, tracepoint ($decimal).*\r\n$gdb_prompt $" { > + set idx [expr $expect_out(1,string)] > + > + if {[info exists tracepoint_hits($idx)]} { > + incr tracepoint_hits($idx) > + } else { > + set tracepoint_hits($idx) 1 > + } > + } > + -re "Target failed to find requested trace frame\..*\r\n$gdb_prompt $" { > + set loop 0 > + } > + } If this gdb_test_multiple FAILs or times out, the loop will continue, over and over, forever. So we need to reverse the logic -- assume no looping, unless the "Found trace ..." regex matched. I'd also suggest to preinitialize the array elements to 0, avoiding the "info exists" calls in "Step 3", here: > +# Step 3, check the number of collections on each tracepoint. > + > +for { set i $tpnum } { $i < [expr $tpnum + 2] } { incr i } { > + if {[info exists tracepoint_hits($i)]} { > + gdb_assert { $tracepoint_hits($i) == $iterations } \ > + "tracepoint $i hit $iterations times" > + } else { > + fail "can't find tracepoint $i hit" Also, here I think it's nicer if PASS/FAIL messages are the same, for test result diffing. Thus, something like: for { set i $tpnum } { $i < [expr $tpnum + 2] } { incr i } { set tracepoint_hits($idx) 0 } while { 1 } { set test "tfind" set idx 0 gdb_test_multiple $test $test { -re "Found trace frame $decimal, tracepoint ($decimal).*\r\n$gdb_prompt $" { set idx [expr $expect_out(1,string)] incr tracepoint_hits($idx) } } if {$idx == 0} { break } } # Step 3, check the number of collections on each tracepoint. for { set i $tpnum } { $i < [expr $tpnum + 2] } { incr i } { gdb_assert { $tracepoint_hits($i) == $iterations } \ "tracepoint $i hit $iterations times" } Otherwise looks good to me. Thanks, Pedro Alves