Re: Multiple locations and breakpoints confusion.

Pedro Alves
2018-05-01T19:32:32Z

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