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.]
next prev parent 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