This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
read watchpoints ignored?
- From: Vladimir Prus <ghost at cs dot msu dot su>
- To: gdb at sources dot redhat dot com
- Date: Fri, 11 Nov 2005 16:22:00 +0300
- Subject: read watchpoints ignored?
Hi,
I found a situation when read watchpoints are ignored by gdb. Consider this
program:
#include <stdio.h>
int a, b, c;
int main()
{
a = 10;
printf("Here I am\n");
b = a;
c = a;
return 0;
}
and this gdb session:
(gdb) b main
Breakpoint 1 at 0x80483a4: file rw.cpp, line 8.
(gdb) r
Starting program: /tmp/a.out
Breakpoint 1, main () at rw.cpp:8
8 a = 10;
(gdb) rwatch a
Hardware read watchpoint 2: a
(gdb) c
Continuing.
Hardware read watchpoint 2: a
Value = 10
0x080483bd in main () at rw.cpp:11
11 c = a;
Expected result: gdb stops on "b = a" line.
Actual result: gdb stops on "c = a".
Here's why it happens. When breakpoint is set, gdb reads the current value
of 'a', which is zero. After continue, a is assigned the value of '10', and
then first read watchpoint fires (on "b = a"). We arrive to
"bpstat_stop_status" (breakpoint.c), which has the following code:
else if (b->type == bp_read_watchpoint ||
b->type == bp_access_watchpoint)
{
...
if (found)
{
...
int e = catch_errors (watchpoint_check, bs, message,
RETURN_MASK_ALL);
switch (e)
{
.......
case WP_VALUE_CHANGED:
if (b->type == bp_read_watchpoint)
{
/* Don't stop: read watchpoints shouldn't fire if
the value has changed. This is for targets
which cannot set read-only watchpoints. */
bs->print_it = print_it_noop;
bs->stop = 0;
continue;
}
Since value of 'a' was changed by the "a = 10" line, "watchpoint_check"
returns "WP_VALUE_CHANGED", and reporting of watchpoint is completely
suppressed.
Questions:
1. Is this a bug?
2. Can this bug be fixed by removing this inner
if (b->type == bp_read_wathcpoint)
statement? This will cause watchpoints to trigger more often
on those target that don't have "read-only watchpoints", but
there will be no risk of missing watchpoint. And I think missed
watchpoint is more harm then spurious watchpoint.
Opinions?
- Volodya