Re: Multiple locations and breakpoints confusion.
Pedro Alves <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 05/01/2018 09:15 AM, Phil Muldoon wrote: > > And indeed that breakpoint is not enabled. If I disable the "parent" breakpoint: > > (gdb) disable 1 > (gdb) info breakpoints > Num Type Disp Enb Address What > 1 breakpoint keep n <MULTIPLE> > 1.1 n 0x00000000004004b3 in multiple_test::foo(int) at multiple.cpp:10 > 1.2 y 0x00000000004004c3 in multiple_test::foo(double) at multiple.cpp:15 > > It shows 1 as disabled but 1.2 as enabled. That seems wrong to me. In > fact, all of the breakpoints are disabled as evidenced by: > > (gdb) r > Starting program: /home/pmuldoon/outgoing/multiple > [Inferior 1 (process 17661) exited normally] > (gdb) IMO, it's working as intended. A location's actual enablement is determined by: is_enabled(bp) && is_enabled(bp.location) That's basically what the code does, in breakpoint.c:should_be_inserted. The advantage IMO is that this way, when you re-enable the (parent) breakpoint, you don't have to re-disable the individual bp locations that you don't care about, again, because gdb remembers the enable/disabled status of the individual bp locations. > > So in recreating multiple location management in Python, I'm a bit > confused if disabling the parent breakpoint should disable all > locations and there's a display buglet on "info breakpoints", or if > the "info breakpoints" output is correct and there's a breakpoint > buglet regarding the disabling of breakpoints? IMO, it's working as intended. Maybe it'd help if we would come up with some concise way to display a location as enabled-but-note-parent-is-disabled differently, like with a different letter or some extra character or something like that. A couple ideas: 1 breakpoint keep y <MULTIPLE> 1.1 y.n 0x00000000004004b3 in multiple_test::foo(int) at multiple.cpp:10 1.2 y.y 0x00000000004004c3 in multiple_test::foo(double) at multiple.cpp:15 1 breakpoint keep n <MULTIPLE> 1.1 n.n 0x00000000004004b3 in multiple_test::foo(int) at multiple.cpp:10 1.2 n.y 0x00000000004004c3 in multiple_test::foo(double) at multiple.cpp:15 or: 1 breakpoint keep y <MULTIPLE> 1.1 n 0x00000000004004b3 in multiple_test::foo(int) at multiple.cpp:10 1.2 y 0x00000000004004c3 in multiple_test::foo(double) at multiple.cpp:15 1 breakpoint keep n <MULTIPLE> 1.1 (y) 0x00000000004004b3 in multiple_test::foo(int) at multiple.cpp:10 1.2 (n) 0x00000000004004c3 in multiple_test::foo(double) at multiple.cpp:15 I think I kind of like the second better, though not sure if it helps more than it confuses. In any case, the relevant sections in the manual could use some clarification. Thanks, Pedro Alves