From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 118775 invoked by alias); 13 Feb 2017 03:51:11 -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 118678 invoked by uid 89); 13 Feb 2017 03:51:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=AWL,BAYES_50,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.2 spammy=False, bts, Continuing, UD:error X-HELO: mail-pg0-f67.google.com Received: from mail-pg0-f67.google.com (HELO mail-pg0-f67.google.com) (74.125.83.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 13 Feb 2017 03:51:04 +0000 Received: by mail-pg0-f67.google.com with SMTP id 194so8616813pgd.0 for ; Sun, 12 Feb 2017 19:51:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=smpNUsOPJc6gmHGmDpBvDz49olI/tHF/63G0xSqgHuI=; b=gfSAOuUpYk277x35LWrK0D+nUO4WnTTyFqhJGE9e9w1KdzNSI+jVkpu7X+cLWXZO1/ N8Se26OTqrUXUqV3CJzdAp80lkO1mbi32Oe41xBxTfCfrJuhXkVgX/had3xc0VgQwQr4 hezQ+sKMtWkmJR7Ak8cxaQJ+hqru+fnivw2G7GXWQxPIc/fzIT9Dml68E+VNzpaVcXOs 0z96+ZwkY17olBZyFv6m0u/eCjj0bOK93TUCPRhEgq2Y35oF5oCjkp8IA/J8G8vEkvwM GdEAju+ghSFLIBYcC4kCZRuboMVjZvd4RFUiJeqIBLwhCP1qUEwZjtejnQCqLl9+nznF /AKQ== X-Gm-Message-State: AMke39mV1Q/cozQFJj/fvkxKhq1pSlRnPUI7lReRRk4ZmtAcQ7q95HWhfjB0t20RTCOuyg== X-Received: by 10.98.106.132 with SMTP id f126mr24076090pfc.1.1486957863040; Sun, 12 Feb 2017 19:51:03 -0800 (PST) Received: from seba.sebabeach.org.gmail.com (173-13-178-53-sfba.hfc.comcastbusiness.net. [173.13.178.53]) by smtp.gmail.com with ESMTPSA id x10sm11014144pfi.117.2017.02.12.19.51.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 12 Feb 2017 19:51:02 -0800 (PST) From: Doug Evans To: Tim Wiederhake Cc: gdb-patches@sourceware.org, markus.t.metzger@intel.com, palves@redhat.com Subject: Re: [PATCH v5 8/9] python: Add tests for record Python bindings References: <1485527996-32506-1-git-send-email-tim.wiederhake@intel.com> <1485527996-32506-9-git-send-email-tim.wiederhake@intel.com> Date: Mon, 13 Feb 2017 03:51:00 -0000 In-Reply-To: <1485527996-32506-9-git-send-email-tim.wiederhake@intel.com> (Tim Wiederhake's message of "Fri, 27 Jan 2017 15:39:55 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00311.txt.bz2 Tim Wiederhake writes: > 2017-01-27 Tim Wiederhake > > gdb/testsuite/ChangeLog: > > * gdb.python/py-record-btrace.c, gdb.python/py-record-btrace.exp, > gdb.python/py-record-full.c, gdb.python/py-record-full.exp: New file. Hi. Just one question. Does py-record-full.exp need something like a "skip_btrace_tests" check? [What if it's run on a target that doesn't have recording.] > > --- > gdb/testsuite/gdb.python/py-record-btrace.c | 46 ++++++++ > gdb/testsuite/gdb.python/py-record-btrace.exp | 146 ++++++++++++++++++++++++++ > gdb/testsuite/gdb.python/py-record-full.c | 46 ++++++++ > gdb/testsuite/gdb.python/py-record-full.exp | 51 +++++++++ > 4 files changed, 289 insertions(+) > create mode 100644 gdb/testsuite/gdb.python/py-record-btrace.c > create mode 100644 gdb/testsuite/gdb.python/py-record-btrace.exp > create mode 100644 gdb/testsuite/gdb.python/py-record-full.c > create mode 100644 gdb/testsuite/gdb.python/py-record-full.exp > > diff --git a/gdb/testsuite/gdb.python/py-record-btrace.c b/gdb/testsuite/gdb.python/py-record-btrace.c > new file mode 100644 > index 0000000..78ba56b > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-record-btrace.c > @@ -0,0 +1,46 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2016-2017 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 . */ > + > +int > +function (int arg) > +{ > + return arg + 1; > +} > + > +void > +inner (void) > +{ > +} > + > +void > +outer (void) > +{ > + inner (); > +} > + > +int > +main (void) > +{ > + int i, j; > + > + for (i = 0, j = 0; i < 100; ++i) > + j = function (j); > + > + outer (); > + > + return j; > +} > diff --git a/gdb/testsuite/gdb.python/py-record-btrace.exp b/gdb/testsuite/gdb.python/py-record-btrace.exp > new file mode 100644 > index 0000000..65a3e7d > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-record-btrace.exp > @@ -0,0 +1,146 @@ > +# This testcase is part of GDB, the GNU debugger. > +# > +# Copyright 2016-2017 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 . > + > +# Skip this test if btrace is disabled. > + > +if { [skip_btrace_tests] } { > + untested "skipping btrace tests" > + return -1 > +} > + > +load_lib gdb-python.exp > + > +standard_testfile > + > +if [prepare_for_testing "failed to prepare" $testfile $srcfile] { return -1 } > + > +# Skip this test if python is disabled. > + > +if { [skip_python_tests] } { > + untested "skipping python tests" > + return -1 > +} > + > +if ![runto_main ] then { > + fail "can't run to main" > + return -1 > +} > + > +with_test_prefix "no or double record" { > + gdb_test "python print(gdb.current_recording())" "None" > + > + gdb_test_no_output "python gdb.start_recording(\"btrace\")" > + gdb_test "python gdb.start_recording(\"btrace\")" ".*gdb\.error: The process is already being recorded\..*" > + > + gdb_test_no_output "python gdb.stop_recording()" "first" > + gdb_test "python gdb.stop_recording()" ".*gdb\.error: No record target is currently active\..*" "second" > +} > + > +with_test_prefix "preopened record btrace" { > + gdb_test_no_output "record btrace" > + gdb_test "python print(gdb.current_recording().method)" "btrace" > + gdb_test "python print(gdb.current_recording().format)" "pt|bts" > + gdb_test_no_output "python gdb.stop_recording()" > +} > + > +with_test_prefix "prepare record" { > + gdb_test_no_output "python r = gdb.start_recording(\"btrace\")" > + gdb_test "python print(len(r.ptid))" "3" > + gdb_test "python print(r.method)" "btrace" > + gdb_test "python print(r.format)" "pt|bts" > + gdb_test "stepi 100" ".*" > + gdb_test_no_output "python insn = r.instruction_history" > + gdb_test_no_output "python call = r.function_call_history" > + gdb_test_no_output "python i = insn\[0\]" > + gdb_test_no_output "python c = call\[0\]" > +} > + > +with_test_prefix "replay begin" { > + gdb_test "python print(r.replay_position)" "None" > + gdb_test "python r.goto(r.begin)" > + gdb_test "python print(r.replay_position.number)" "1" > +} > + > +with_test_prefix "replay end" { > + gdb_test "python r.goto(r.end)" > + gdb_test "python print(r.replay_position)" "None" > +} > + > +with_test_prefix "instruction " { > + gdb_test "python print(i.number)" "1" > + gdb_test "python print(i.error)" "None" > + gdb_test "python print(i.sal)" "symbol and line for .*" > + gdb_test "python print(i.pc)" "$decimal" > + gdb_test "python print(i.data)" "" > + gdb_test "python print(i.decoded)" ".*" > + gdb_test "python print(i.size)" "$decimal" > + gdb_test "python print(i.is_speculative)" "False" > +} > + > +with_test_prefix "function call" { > + gdb_test "python print(c.number)" "1" > + gdb_test "python print(c.symbol)" "main" > + gdb_test "python print(c.level)" "$decimal" > + gdb_test "python print(len(c.instructions))" "$decimal" > + gdb_test "python print(c.up)" "None" > + gdb_test "python print(c.prev_sibling)" "None" > + gdb_test "python print(c == c.next_sibling.prev_sibling)" "True" > +} > + > +with_test_prefix "list" { > + gdb_test "python print(len(insn))" "100" > + gdb_test "python print(len(insn\[23:65\]))" "42" > + gdb_test "python print(insn\[17:\]\[2\].number)" "20" > + gdb_test "python print(i in insn)" "True" > + gdb_test "python print(i in call)" "False" > + gdb_test "python print(c in insn)" "False" > + gdb_test "python print(c in call)" "True" > + gdb_test "python print(insn.index(i))" "0" > + gdb_test "python print(insn.count(i))" "1" > +} > + > +with_test_prefix "sublist" { > + gdb_test_no_output "python s1 = insn\[3:72:5\]" > + gdb_test_no_output "python s2 = s1\[2:13:3\]" > + gdb_test_no_output "python s3 = s1\[13:2:-3\]" > + gdb_test_no_output "python s4 = insn\[::-1\]" > + > + gdb_test "python print(\[i.number for i in s1\])" "\\\[4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69\\\]" > + gdb_test "python print(\[i.number for i in s2\])" "\\\[14, 29, 44, 59\\\]" > + gdb_test "python print(\[i.number for i in s3\])" "\\\[69, 54, 39, 24\\\]" > + > + gdb_test "python print(len(s1))" "14" > + gdb_test "python print(len(s2))" "4" > + gdb_test "python print(len(s3))" "4" > + gdb_test "python print(len(s4))" "100" > + > + gdb_test "python print(s4\[5\].number)" "95" > + gdb_test "python print(s4\[-5\].number)" "5" > + gdb_test "python print(s4\[100\].number)" ".*IndexError.*" > + gdb_test "python print(s4\[-101\].number)" ".*IndexError.*" > +} > + > +with_test_prefix "level" { > + gdb_test_no_output "python gdb.stop_recording()" > + gdb_test "break inner" "Breakpoint.*" > + gdb_test "continue" "Continuing\..*" > + gdb_test_no_output "record btrace" > + gdb_test "step" "outer ().*" "step one" > + gdb_test "step" "main ().*" "step two" > + gdb_test "python print(gdb.current_recording().function_call_history\[0\].level)" "1" > + gdb_test "python print(gdb.current_recording().function_call_history\[1\].level)" "0" > +} > diff --git a/gdb/testsuite/gdb.python/py-record-full.c b/gdb/testsuite/gdb.python/py-record-full.c > new file mode 100644 > index 0000000..78ba56b > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-record-full.c > @@ -0,0 +1,46 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2016-2017 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 . */ > + > +int > +function (int arg) > +{ > + return arg + 1; > +} > + > +void > +inner (void) > +{ > +} > + > +void > +outer (void) > +{ > + inner (); > +} > + > +int > +main (void) > +{ > + int i, j; > + > + for (i = 0, j = 0; i < 100; ++i) > + j = function (j); > + > + outer (); > + > + return j; > +} > diff --git a/gdb/testsuite/gdb.python/py-record-full.exp b/gdb/testsuite/gdb.python/py-record-full.exp > new file mode 100644 > index 0000000..de18b87 > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-record-full.exp > @@ -0,0 +1,51 @@ > +# This testcase is part of GDB, the GNU debugger. > +# > +# Copyright 2016-2017 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 . > + > +load_lib gdb-python.exp > + > +standard_testfile > + > +if [prepare_for_testing "failed to prepare" $testfile $srcfile] { return -1 } > + > +# Skip this test if python is disabled. > + > +if { [skip_python_tests] } { > + untested "skipping python tests" > + return -1 > +} > + > +if ![runto_main ] then { > + fail "can't run to main" > + return -1 > +} > + > +with_test_prefix "no or double record" { > + gdb_test "python print(gdb.current_recording())" "None" > + > + gdb_test_no_output "python gdb.start_recording(\"full\")" > + gdb_test "python gdb.start_recording(\"full\")" ".*gdb\.error: The process is already being recorded\..*" > + > + gdb_test_no_output "python gdb.stop_recording()" "first" > + gdb_test "python gdb.stop_recording()" ".*gdb\.error: No record target is currently active\..*" "second" > +} > + > +with_test_prefix "preopened record full" { > + gdb_test_no_output "record full" > + gdb_test "python print(gdb.current_recording().method)" "full" > + gdb_test "python print(gdb.current_recording().format)" "full" > + gdb_test_no_output "python gdb.stop_recording()" > +}