echo 'struct { struct {} *p; } *v; int main(void) { return 0; }'|gcc -Wall -g -x c -; gdb ./a.out -ex start -ex 'watch -l v->p->x' GNU gdb (GDB) 7.6.50.20130704-cvs [...] Temporary breakpoint 1, main () at <stdin>:1 1 <stdin>: No such file or directory. Segmentation fault
Found by Petr Spacek: https://bugzilla.redhat.com/show_bug.cgi?id=921078
I have a patch that changes it to: (gdb) watch -l v->p->x Cannot access memory at address 0x0 I'm running it through regression-testing now. Basically this just amounts to letting fetch_subexp_value pass through MEMORY_ERROR in this case.
It's also weird that this doesn't emit an error about "x" not being a field.
CVSROOT: /cvs/src Module name: src Changes by: tromey@sourceware.org 2013-08-02 16:41:08 Modified files: gdb : ChangeLog breakpoint.c eval.c ppc-linux-nat.c value.h gdb/testsuite : ChangeLog gdb/testsuite/gdb.base: watchpoint.c watchpoint.exp Log message: fix PR symtab/15719 This patch fixes PR symtab/15719. The bug is that "watch -location" crashes on a certain expression. The problem is that fetch_subexp_value is catching an exception. For ordinary watchpoints this is ok; but for location watchpoints, it is better for the exception to propagate. Built and regtested on x86-64 Fedora 18. New test case included. PR symtab/15719: * breakpoint.c (update_watchpoint, watchpoint_check) (watch_command_1): Update. * eval.c (fetch_subexp_value): Add "preserve_errors" parameter. * ppc-linux-nat.c (check_condition): Update. * value.h (fetch_subexp_value): Update. * gdb.base/watchpoint.c (struct foo5): New. (nullptr): New global. * gdb.base/watchpoint.exp (test_watch_location): Add test. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15860&r2=1.15861 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.c.diff?cvsroot=src&r1=1.773&r2=1.774 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/eval.c.diff?cvsroot=src&r1=1.184&r2=1.185 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ppc-linux-nat.c.diff?cvsroot=src&r1=1.123&r2=1.124 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/value.h.diff?cvsroot=src&r1=1.222&r2=1.223 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3757&r2=1.3758 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/watchpoint.c.diff?cvsroot=src&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/watchpoint.exp.diff?cvsroot=src&r1=1.65&r2=1.66
Fixed.