From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id E6BC93858C2D for ; Mon, 17 Apr 2023 18:56:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E6BC93858C2D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark.ca Received: from [172.16.0.146] (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 599391E0D5; Mon, 17 Apr 2023 14:56:42 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1681757802; bh=RJk1fks4sCtCjRI8ZpeRW918tEvgfkDNdaRBcFaFI90=; h=Date:Subject:To:References:From:In-Reply-To:From; b=MlBKGglRe5+5BP1c7pI/H0Q5uLL1+Bhabje5ibiV5wehMtxtBsTbQIzMVXeemgvx6 i2lmUIwPtG4MAhS0mdyU/GAQrnm4a9kxp7wQ0HEzpLafuL2Bj3AsgspdL47iyeB5rd Y1dQkPxgt2n9CvNvQO+8N0BQJrnax6WAJq6PfmHo= Message-ID: <520df49c-17b5-1446-b400-cfbd36f22d4c@simark.ca> Date: Mon, 17 Apr 2023 14:56:41 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v4] [PR python/29603] Disable out-of-scope watchpoints Content-Language: fr To: Johnson Sun , Lancelot SIX , gdb-patches@sourceware.org References: <0e614d96-52dc-6e14-ea23-8aca19c5414c@gmail.com> <20230323183118.3172-1-j3.soon777@gmail.com> From: Simon Marchi In-Reply-To: <20230323183118.3172-1-j3.soon777@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: > diff --git a/gdb/testsuite/gdb.python/py-watchpoint.exp b/gdb/testsuite/gdb.python/py-watchpoint.exp > new file mode 100644 > index 0000000000..5504736629 > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-watchpoint.exp > @@ -0,0 +1,54 @@ > +# Copyright (C) 2022 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 . > + > +# Check that Watchpoints are deleted after use. > + > +load_lib gdb-python.exp > + > +standard_testfile > + > +if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { > + return -1 > +} > + > +# Skip all tests if Python scripting is not enabled. > +if { [skip_python_tests] } { continue } This needs to be updated to: require allow_python_tests > + > +if ![runto_main] then { > + return 0 > +} > + > +# For remote host testing > +set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py] > + > +gdb_test_no_output "set can-use-hw-watchpoints 0" "don't use hardware watchpoints" > +gdb_test "break 24" ".*" "set breakpoint before loop" Avoid using hardcoded line numbers. Either break on a symbol (function) name, or put a comment in the source code and use gdb_get_line_number. > diff --git a/gdb/testsuite/gdb.python/py-watchpoint.py b/gdb/testsuite/gdb.python/py-watchpoint.py > new file mode 100644 > index 0000000000..c5fae00e93 > --- /dev/null > +++ b/gdb/testsuite/gdb.python/py-watchpoint.py > @@ -0,0 +1,30 @@ > +# Copyright (C) 2022 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 . > + > + > +class MyBreakpoint(gdb.Breakpoint): > + def __init__(self, *args, **kwargs): > + gdb.Breakpoint.__init__(self, *args, **kwargs) > + self.n = 0 I think it would be a bit more straightforward to read if you passed the arguments to the base class directly: def __init__(self): super().__init__("i", gdb.BP_WATCHPOINT) self.n = 0 I think we can use the super() notation, now that we only support Python 3? > + > + def stop(self): > + self.n += 1 > + print("Watchpoint Hit:", self.n, flush=True) > + return False > + > + > +MyBreakpoint("i", gdb.BP_WATCHPOINT) > + > +print("Python script imported") I tried your test with the native-gdbserver and native-extended-gdbserver boards, and for some reason it doesn't work. You can try with: $ make check TESTS="gdb.python/py-watchpoint.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver" In gdb.log: ... Python script imported (gdb) PASS: gdb.python/py-watchpoint.exp: import python scripts python print(len(gdb.breakpoints())) 2 (gdb) PASS: gdb.python/py-watchpoint.exp: check modified BP count gdb_expect_list pattern: /Watchpoint Hit: 1/ continue Continuing. Watchpoint Hit: 1 gdb_expect_list pattern: /Watchpoint Hit: 2/ FAIL: gdb.python/py-watchpoint.exp: run until program stops (pattern 2) (timeout) I didn't dig to understand why, but we would need to fix that before merging. Simon