From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22125 invoked by alias); 4 Dec 2003 16:58:55 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 22118 invoked from network); 4 Dec 2003 16:58:54 -0000 Received: from unknown (HELO BODKIN.NUIGALWAY.IE) (140.203.7.16) by sources.redhat.com with SMTP; 4 Dec 2003 16:58:54 -0000 Received: from CONVERSION-DAEMON.bodkin.nuigalway.ie by bodkin.nuigalway.ie (PMDF V6.2-X17 #30588) id <01L3T0140IKW000GT2@bodkin.nuigalway.ie> for gdb@sources.redhat.com; Thu, 04 Dec 2003 16:57:12 +0000 (GMT) Received: from bodkin.nuigalway.ie (emu1.nuigalway.ie [140.203.7.53]) by bodkin.nuigalway.ie (PMDF V6.2-X17 #30588) with ESMTP id <01L3T013SAUY000JG6@bodkin.nuigalway.ie>; Thu, 04 Dec 2003 16:57:12 +0000 (GMT) Date: Thu, 04 Dec 2003 16:58:00 -0000 From: Mihai Basa Subject: RE: Auto-deleting watchpoints To: gdb@sources.redhat.com Cc: Eli Zaretskii Message-id: <3FCFC03D@bodkin.nuigalway.ie> MIME-version: 1.0 Content-type: text/plain; charset=ISO-8859-1 Content-transfer-encoding: 7bit X-WebMail-UserID: 02148200 X-EXP32-SerialNo: 00003610 X-SW-Source: 2003-12/txt/msg00085.txt.bz2 >===== Original Message From Eli Zaretskii ===== >> Date: Tue, 2 Dec 2003 15:44:51 -0500 >> From: Daniel Jacobowitz >> > >> > This includes deleting local watchpoints even when the program makes a call to >> > a library function (say, sqrt()). I believe this auto-deletion _severly_ >> > reduces the practicality of watchpoints, because they simply go away on the >> > first call they hit! >> >> That is not what is supposed to happen. The watchpoint should stay >> until the function containing the local variable has exited. > >Right. And I have simple test cases to prove it. > >Mihai, you probably discovered a bug. Please send a test case. I've tried this with gdb-6.0, and the fenomenon seems to have disappeared, but I've only tested it lightly. I didn't really manage to isolate the bug, as it only appeared in certain configurations of the source code, and showed up in different places (so the test case is not simple at all). It appears that gdb-6.0 has somehow solved this. To summarize what was happening in gdb-5.3: A watchpoint is set on an element of a malloc'ed array. The pointer to this array is sent to a subroutine, where, after a while, the previously-set watch gets deleted on a call to printf. The message produced is: Watchpoint 2 deleted because the program has left the block in which its expression is valid. 0x4008e00e in vfprintf () from /lib/i686/libc.so.6 and the source-line on which the watchpoint to "active_id[123]" got deleted is: printf("from i = %i at %lf at vel= %lf ", i,P[i].x[0] ,P[i].u[0]); (it has nothing to do with active_id[123]). The backtrace was: (gdb) backtrace #0 0x4008e00e in vfprintf () from /lib/i686/libc.so.6 #1 0x00000000 in ?? () Now gdb-6.0 displays the 'watchpoint deleted' message only when it hits the end of the program (in a library function called "_fini()"). Regards, Mihai Basa