Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Chandru <chandru@in.ibm.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch]: inform user that a watchpoint is hit
Date: Tue, 18 Aug 2009 17:31:00 -0000	[thread overview]
Message-ID: <e394668d0908181009x73d887a9j530b3cc6e257f9f6@mail.gmail.com> (raw)
In-Reply-To: <4A869488.2060407@in.ibm.com>

On Sat, Aug 15, 2009 at 3:57 AM, Chandru<chandru@in.ibm.com> wrote:
> Doug Evans wrote:
>>
>> On Fri, Aug 14, 2009 at 3:32 AM, Chandru<chandru@in.ibm.com> wrote:
>>
>>>
>>> When a program is restarted within gdb, the initial breakpoint hit
>>> messages are
>>> not outputted on to the screen. Inform the user that a watchpoint has
>>> been hit
>>>
>>> Signed-off-by: Chandru Siddalingappa <chandru@ilinux.vnet.ibm.com>
>>> ---
>>>
>>> --- gdb/breakpoint.c.orig       2009-08-14 17:53:06.000000000 +0530
>>> +++ gdb/breakpoint.c    2009-08-14 17:54:02.000000000 +0530
>>> @@ -842,6 +842,9 @@ update_watchpoint (struct breakpoint *b,
>>>  struct bp_location *loc;
>>>  bpstat bs;
>>>
>>> +  if (breakpoint_enabled (b))
>>> +      mention(b);
>>> +
>>>  unlink_locations_from_global_list (b);
>>>  for (loc = b->loc; loc;)
>>>    {
>>>
>>>
>>
>> Hi.
>> If we're stopping because of a watchpoint and not reporting it, that's
>> bad.
>> But it seems odd that this is happening, and simple experiments don't
>> reveal anything.
>> Do you have a testcase?
>>
>
> yes,
>
> The steps performed to reproduce are:
>
> 1) Compile the following program with debug info
> 2) Run the program.
> 3) Set a watchpoint for "value1" variable.
> 4) Run the test and do some checks. 5) Program exits. Now restart the
> program execution
> 6) Expect to see the message of hitting the watchpoint for value1 in main ()
> line 20.
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int value1 = -1;
> int value2 = -1;
>
> int func1 ()
> {
>   value1=2;
>   value2=value1;
>     return 0;
>
> }
>
>
> int main ()
> {
>   int i;
>
>   value1 =3;
>   value2 = value1;
>   for (i=0; i<2; i++) {
>     value1 = i;
>     value2 = value1;
>   }
>
>   func1();
>
>    return 0;
> }
>
>
> ---------------
>
> (gdb) break main
> Breakpoint 1 at 0x8048453: file rawatch.c, line 20.
> (gdb) run
> Starting program: /home/vrvazque/rawatch
>
> Breakpoint 1, main () at rawatch.c:20
> 20          value1 =3;
> (gdb) rwatch value1
> Hardware read watchpoint 2: value1
> (gdb) awatch value1
> Hardware access (read/write) watchpoint 3: value1
> (gdb) cont
> Continuing.
> Hardware access (read/write) watchpoint 3: value1
>
> Old value = -1
> New value = 3
> 0x08048462 in main () at rawatch.c:21
> 21          value2 = value1;
> (gdb) cont
> ...
> ...
> ...
> (gdb) cont
> Continuing.
>
> Program exited normally.
> (gdb) run
> Starting program: /home/vrvazque/rawatch
>
> Breakpoint 1, main () at rawatch.c:20
> 20          value1 =3;
> (gdb) cont
>
>

Thanks for the testcase!

Here's what I see with current cvs head:
[target = amd64-linux]

gdb$ gcc -g chandru.c
gdb$ ./gdb -nx a.out
GNU gdb (GDB) 6.8.50.20090818-cvs
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
(gdb) b main
Breakpoint 1 at 0x400471: file chandru.c, line 20.
(gdb) r
Starting program: /usr/local/g3/gnu/sourceware/dn/build/obj64/gdb/a.out

Breakpoint 1, main () at chandru.c:20
20        value1 =3;
(gdb) rwatch value1
Hardware read watchpoint 2: value1
(gdb) awatch value1
Hardware access (read/write) watchpoint 3: value1
(gdb) c
Continuing.
Hardware access (read/write) watchpoint 3: value1

Old value = -1
New value = 3
0x0000000000400481 in main () at chandru.c:21
21        value2 = value1;
(gdb) c
Continuing.
Hardware access (read/write) watchpoint 3: value1

Old value = 3
New value = 0
main () at chandru.c:24
24          value2 = value1;
(gdb)
Continuing.
Hardware read watchpoint 2: value1

Value = 0
Hardware access (read/write) watchpoint 3: value1

Value = 0
0x000000000040049f in main () at chandru.c:24
24          value2 = value1;
(gdb)
Continuing.
Hardware access (read/write) watchpoint 3: value1

Old value = 0
New value = 1
main () at chandru.c:24
24          value2 = value1;
(gdb)
Continuing.
Hardware read watchpoint 2: value1

Value = 1
Hardware access (read/write) watchpoint 3: value1

Value = 1
0x000000000040049f in main () at chandru.c:24
24          value2 = value1;
(gdb)
Continuing.
Hardware access (read/write) watchpoint 3: value1

Old value = 1
New value = 2
func1 () at chandru.c:10
10        value2=value1;
(gdb)
Continuing.
Hardware read watchpoint 2: value1

Value = 2
Hardware access (read/write) watchpoint 3: value1

Value = 2
0x000000000040045c in func1 () at chandru.c:10
10        value2=value1;
(gdb)
Continuing.

Program exited normally.
(gdb) r
Starting program: /usr/local/g3/gnu/sourceware/dn/build/obj64/gdb/a.out

Breakpoint 1, main () at chandru.c:20
20        value1 =3;
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400471 in main at chandru.c:20
        breakpoint already hit 1 time
2       read watchpoint keep y                      value1
3       acc watchpoint keep y                      value1
(gdb) c
Continuing.
Hardware access (read/write) watchpoint 3: value1

Old value = -1
New value = 3
0x0000000000400481 in main () at chandru.c:21
21        value2 = value1;
(gdb)

So in cvs head I'm not seeing a problem (though maybe there's more
needed to recreate it).
Which version of gdb are you using?

[Also, I haven't researched this, but maybe there's some overlap here with
http://sourceware.org/ml/gdb-patches/2009-08/msg00254.html.
Dunno.  Doesn't seem like it but thought I'd point it out.]


  reply	other threads:[~2009-08-18 17:10 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-14 13:15 Chandru
2009-08-15 10:57 ` Doug Evans
2009-08-15 12:22   ` Chandru
2009-08-18 17:31     ` Doug Evans [this message]
2009-08-19  8:05       ` Chandru
2009-08-19 13:03         ` Jan Kratochvil
2009-08-24 11:27           ` Chandru
2009-08-27  7:45             ` Chandru
2009-08-27  8:26               ` Jan Kratochvil

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=e394668d0908181009x73d887a9j530b3cc6e257f9f6@mail.gmail.com \
    --to=dje@google.com \
    --cc=chandru@in.ibm.com \
    --cc=gdb-patches@sourceware.org \
    /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