Sven Rudolph writes in email to me: > > Package: gdb > > Version: 4.12 > > > > As you can see below, when setting a memory breakpoint on a structure > > member GDB uses the address of the start of the structure by mistake. > > Applying *& to the member (to take its address and then dereference > > it) gives correct results. > > (typescript deleted) > > You used commands that don't even exist in the current version of gdb, > so i cannot reproduce this problem. I'm not a gdb expert, so please > try to reproduce this problem on a current gdb (or close the bug) .
These commands have equivalents in gdb 4.14-1. However, the equivalents don't appear to work for me at all. See the transcript below. Please can we keep this bug open until (a) the memory watchpoints, which are a useful feature, work and (b) we see that the original bug is fixed. Ian. -chiark:~/junk> cat t.c struct foo { int a,b; }; void fong(struct foo *p, int x) { p->b=x; } int main(int argc, char **argv) { struct foo f; f.a= 2; f.b= 3; fong(&f,4); f.b=5; fong(&f,6); } -chiark:~/junk> gcc -g t.c -chiark:~/junk> gdb a.out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.14 (i486-debian-linux), Copyright 1995 Free Software Foundation, Inc... (gdb) break main Breakpoint 1 at 0x1093: file t.c, line 7. (gdb) run Starting program: /u/ian/junk/a.out Breakpoint 1, main (argc=1, argv=0xbffff858) at t.c:7 7 f.a= 2; (gdb) step 8 f.b= 3; (gdb) step 9 fong(&f,4); (gdb) print f $1 = {a = 2, b = 3} (gdb) watch f.b Hardware watchpoint 2: f.b (gdb) watch f.a Hardware watchpoint 3: f.a (gdb) watch *&f.b Hardware watchpoint 4: *&f.b (gdb) info watchpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x00001093 in main at t.c:7 breakpoint already hit 1 time 2 hw watchpoint keep y f.b 3 hw watchpoint keep y f.a 4 hw watchpoint keep y *&f.b (gdb) cont Continuing. warning: Hardware watchpoint 3: Could not insert watchpoint warning: Hardware watchpoint 4: Could not insert watchpoint ptrace: Unknown error -1. Cannot insert breakpoints. The same program may be running in another process. (gdb) quit The program is running. Quit anyway (and kill it)? (y or n) y -chiark:~/junk>