From: Simon Marchi <simark@simark.ca>
To: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>,
gdb-patches@sourceware.org
Subject: Re: [PATCH v4 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location
Date: Fri, 16 Oct 2020 18:20:46 -0400 [thread overview]
Message-ID: <43436dc2-498f-f405-b4b5-c1c9a4a0be7b@simark.ca> (raw)
In-Reply-To: <b89a68f18ae36c0d682ecb36581c5b9fb669c6dd.1602591230.git.tankut.baris.aktemur@intel.com>
On 2020-10-13 8:25 a.m., Tankut Baris Aktemur via Gdb-patches wrote:
> Currently, for a conditional breakpoint, GDB checks if the condition
> can be evaluated in the context of the first symtab and line (SAL).
> In case of an error, defining the conditional breakpoint is aborted.
> This prevents having a conditional breakpoint whose condition may
> actually be meaningful for some of the location contexts. This patch
> makes it possible to define conditional BPs by checking all location
> contexts. If the condition is meaningful for even one context, the
> breakpoint is defined. The locations for which the condition gives
> errors are disabled.
>
> The bp_location struct is introduced a new field, 'disabled_by_cond'.
> This field denotes whether the location is disabled automatically
> because the condition was non-evaluatable. Disabled-by-cond locations
> cannot be enabled by the user. But locations that are not
> disabled-by-cond can be enabled/disabled by the user manually as
> before.
>
> For a concrete example, consider 3 contexts of a function 'func'.
>
> class Base
> {
> public:
> int b = 20;
>
> void func () {}
> };
>
> class A : public Base
> {
> public:
> int a = 10;
>
> void func () {}
> };
>
> class C : public Base
> {
> public:
> int c = 30;
>
> void func () {}
> };
>
> Note that
>
> * the variable 'a' is defined only in the context of A::func.
> * the variable 'c' is defined only in the context of C::func.
> * the variable 'b' is defined in all the three contexts.
>
> With the existing GDB, it's not possible to define a conditional
> breakpoint at 'func' if the condition refers to 'a' or 'c':
>
> (gdb) break func if a == 10
> No symbol "a" in current context.
> (gdb) break func if c == 30
> No symbol "c" in current context.
> (gdb) info breakpoints
> No breakpoints or watchpoints.
>
> With this patch, it becomes possible:
>
> (gdb) break func if a == 10
> warning: failed to validate condition at location 1, disabling:
> No symbol "a" in current context.
> warning: failed to validate condition at location 3, disabling:
> No symbol "a" in current context.
> Breakpoint 1 at 0x11b6: func. (3 locations)
> (gdb) break func if c == 30
> Note: breakpoint 1 also set at pc 0x11ce.
> Note: breakpoint 1 also set at pc 0x11c2.
> Note: breakpoint 1 also set at pc 0x11b6.
> warning: failed to validate condition at location 1, disabling:
> No symbol "c" in current context.
> warning: failed to validate condition at location 2, disabling:
> No symbol "c" in current context.
> Breakpoint 2 at 0x11b6: func. (3 locations)
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> stop only if a == 10
> 1.1 N* 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 y 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 N* 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> 2 breakpoint keep y <MULTIPLE>
> stop only if c == 30
> 2.1 N* 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 2.2 N* 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 2.3 y 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> (*): Breakpoint condition is invalid at this location.
>
> Here, uppercase 'N' denotes that the location is disabled because of
> the invalid condition, as mentioned with a footnote in the legend of
> the table. Locations that are disabled by the user are still denoted
> with lowercase 'n'. Executing the code hits the breakpoints 1.2 and
> 2.3 as expected.
>
> Defining a condition on an unconditional breakpoint gives the same
> behavior above:
>
> (gdb) break func
> Breakpoint 1 at 0x11b6: func. (3 locations)
> (gdb) cond 1 a == 10
> warning: failed to validate condition at location 1.1, disabling:
> No symbol "a" in current context.
> warning: failed to validate condition at location 1.3, disabling:
> No symbol "a" in current context.
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> stop only if a == 10
> 1.1 N* 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 y 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 N* 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> (*): Breakpoint condition is invalid at this location.
>
> Locations that are disabled because of a condition cannot be enabled
> by the user:
>
> ...
> (gdb) enable 1.1
> Breakpoint 1's condition is invalid at location 1, cannot enable.
>
> Resetting the condition enables the locations back:
>
> ...
> (gdb) cond 1
> Breakpoint 1's condition is now valid at location 1, enabling.
> Breakpoint 1's condition is now valid at location 3, enabling.
> Breakpoint 1 now unconditional.
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> 1.1 y 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 y 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 y 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
>
> If a location is disabled by the user, a condition can still be defined
> but the location will remain disabled even if the condition is meaningful
> for the disabled location:
>
> ...
> (gdb) disable 1.2
> (gdb) cond 1 a == 10
> warning: failed to validate condition at location 1.1, disabling:
> No symbol "a" in current context.
> warning: failed to validate condition at location 1.3, disabling:
> No symbol "a" in current context.
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> stop only if a == 10
> 1.1 N* 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 n 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 N* 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> (*): Breakpoint condition is invalid at this location.
>
> The condition of a breakpoint can be changed. Locations'
> enable/disable states are updated accordingly.
>
> ...
> (gdb) cond 1 c == 30
> warning: failed to validate condition at location 1.1, disabling:
> No symbol "c" in current context.
> Breakpoint 1's condition is now valid at location 3, enabling.
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> stop only if c == 30
> 1.1 N* 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 N* 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 y 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> (*): Breakpoint condition is invalid at this location.
>
> (gdb) cond 1 b == 20
> Breakpoint 1's condition is now valid at location 1, enabling.
> (gdb) info breakpoints
> Num Type Disp Enb Address What
> 1 breakpoint keep y <MULTIPLE>
> stop only if b == 20
> 1.1 y 0x00000000000011b6 in Base::func() at condbreak-multi-context.cc:23
> 1.2 n 0x00000000000011c2 in A::func() at condbreak-multi-context.cc:31
> 1.3 y 0x00000000000011ce in C::func() at condbreak-multi-context.cc:39
> # Note that location 1.2 was disabled by the user previously.
>
> If the condition expression is bad for all the locations, it will be
> rejected.
>
> (gdb) cond 1 garbage
> No symbol "garbage" in current context.
>
> For conditions that are invalid or valid for all the locations of a
> breakpoint, the existing behavior is preserved.
>
> Regression-tested on X86_64 Linux.
Hi Baris,
Since I didn't have any major issue with the previous version, I just
took a quick look at this one, and I think it's fine.
Simon
next prev parent reply other threads:[~2020-10-16 22:20 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-31 15:42 [PATCH 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
[not found] ` <cover.1596209606.git.tankut.baris.aktemur@intel.com>
2020-07-31 15:42 ` [PATCH 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur
2020-07-31 15:42 ` [RFC][PATCH 2/2] gdb/breakpoint: add a '-force' flag to the 'condition' command Tankut Baris Aktemur
2020-08-03 10:28 ` Andrew Burgess
2020-08-20 21:24 ` [PATCH v2 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
2020-08-20 21:24 ` [PATCH v2 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur
2020-09-19 3:05 ` Simon Marchi
2020-09-25 15:49 ` Aktemur, Tankut Baris via Gdb-patches
2020-09-25 16:10 ` Simon Marchi
2020-09-25 18:15 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-13 12:24 ` Aktemur, Tankut Baris via Gdb-patches
2020-08-20 21:24 ` [PATCH v2 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur
2020-09-04 11:02 ` [PATCH v2 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
2020-09-11 11:56 ` Tankut Baris Aktemur
2020-09-18 20:36 ` [PING][PATCH " Tankut Baris Aktemur
2020-09-25 15:51 ` [PATCH v3 " Tankut Baris Aktemur via Gdb-patches
2020-09-25 15:51 ` [PATCH v3 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur via Gdb-patches
2020-09-25 15:51 ` [PATCH v3 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur via Gdb-patches
2020-10-13 12:25 ` [PATCH v4 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur via Gdb-patches
2020-10-13 12:25 ` [PATCH v4 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur via Gdb-patches
2020-10-13 15:06 ` Eli Zaretskii via Gdb-patches
2020-10-13 15:17 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-16 22:20 ` Simon Marchi [this message]
2020-10-13 12:25 ` [PATCH v4 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur via Gdb-patches
2020-10-13 15:08 ` Eli Zaretskii via Gdb-patches
2020-10-13 15:46 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-13 16:12 ` Eli Zaretskii via Gdb-patches
2020-10-16 22:45 ` Simon Marchi
2020-10-19 13:58 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-19 14:07 ` Simon Marchi
2020-10-27 10:13 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-29 10:10 ` Tom de Vries
2020-10-29 10:30 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-29 17:30 ` Pedro Alves
2020-11-10 19:33 ` Aktemur, Tankut Baris via Gdb-patches
2020-12-05 17:30 ` Pedro Alves
2020-12-10 20:30 ` Tom Tromey
2020-12-15 11:20 ` Aktemur, Tankut Baris via Gdb-patches
2020-11-10 19:51 ` Aktemur, Tankut Baris via Gdb-patches
2020-10-28 16:57 ` [PATCH v4 0/2] Breakpoint conditions at locations with differing contexts Gary Benson via Gdb-patches
2020-10-29 7:43 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-05 17:45 ` [PATCH " Jonah Graham
2021-04-06 14:11 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-06 14:37 ` Jonah Graham
2021-04-07 7:09 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 11:26 ` Jonah Graham
2021-04-07 14:55 ` [PATCH 0/4] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-07 14:55 ` [PATCH 1/4] gdb/doc: update the 'enabled' field's description for BP locations in MI Tankut Baris Aktemur via Gdb-patches
2021-04-07 15:15 ` Eli Zaretskii via Gdb-patches
2021-04-07 21:42 ` Simon Marchi via Gdb-patches
2021-04-07 14:55 ` [PATCH 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-07 21:49 ` Simon Marchi via Gdb-patches
2021-04-07 14:55 ` [PATCH 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-07 22:08 ` Simon Marchi via Gdb-patches
2021-04-08 7:44 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-08 13:59 ` Simon Marchi via Gdb-patches
2021-04-08 14:19 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 14:55 ` [PATCH 4/4] gdb/mi: add a '-b' flag to the '-break-insert' cmd to force the condition Tankut Baris Aktemur via Gdb-patches
2021-04-07 15:18 ` Eli Zaretskii via Gdb-patches
2021-04-07 15:27 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 15:53 ` Eli Zaretskii via Gdb-patches
2021-04-07 16:05 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 16:50 ` Eli Zaretskii via Gdb-patches
2021-04-07 22:26 ` Simon Marchi via Gdb-patches
2021-04-08 14:22 ` [PATCH v2 0/4] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22 ` [PATCH v2 1/4] gdb/breakpoint: display "N" on MI for disabled-by-condition locations Tankut Baris Aktemur via Gdb-patches
2021-04-08 15:04 ` Eli Zaretskii via Gdb-patches
2021-04-08 14:22 ` [PATCH v2 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22 ` [PATCH v2 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22 ` [PATCH v2 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-04-08 15:06 ` Eli Zaretskii via Gdb-patches
2021-04-08 15:12 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-11 1:06 ` Jonah Graham
2021-04-11 1:12 ` Simon Marchi via Gdb-patches
2021-04-21 12:06 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 12:36 ` Simon Marchi via Gdb-patches
2021-04-11 1:13 ` [PATCH v2 0/4] Multi-context invalid breakpoint conditions and MI Jonah Graham
2021-04-21 12:17 ` [PATCH v3 " Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:17 ` [PATCH v3 1/4] gdb/breakpoint: display "N" on MI for disabled-by-condition locations Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:48 ` Eli Zaretskii via Gdb-patches
2021-04-21 12:17 ` [PATCH v3 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:17 ` [PATCH v3 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-21 13:18 ` Simon Marchi via Gdb-patches
2021-04-21 13:29 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 14:28 ` Simon Marchi via Gdb-patches
2021-04-21 12:17 ` [PATCH v3 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:50 ` Eli Zaretskii via Gdb-patches
2021-04-21 13:37 ` Simon Marchi via Gdb-patches
2021-04-21 13:49 ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 14:26 ` Simon Marchi via Gdb-patches
2021-04-22 14:35 ` [PATCH v4 0/2] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-22 14:35 ` [PATCH v4 1/2] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-05-06 2:40 ` Simon Marchi via Gdb-patches
2021-04-22 14:35 ` [PATCH v4 2/2] gdb/mi: add a '--force' flag to the '-break-condition' command Tankut Baris Aktemur via Gdb-patches
2021-04-22 14:47 ` Aktemur, Tankut Baris via Gdb-patches
2021-05-06 2:46 ` Simon Marchi via Gdb-patches
2021-05-06 8:50 ` Aktemur, Tankut Baris via Gdb-patches
2021-07-11 18:51 ` Jonah Graham
2021-07-12 0:25 ` Jonah Graham
2021-07-12 8:33 ` Aktemur, Tankut Baris via Gdb-patches
2021-05-05 15:57 ` [PATCH v4 0/2] Multi-context invalid breakpoint conditions and MI Aktemur, Tankut Baris via Gdb-patches
2021-04-07 21:24 ` [PATCH 0/2] Breakpoint conditions at locations with differing contexts Simon Marchi via Gdb-patches
2021-04-07 21:36 ` Jonah Graham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43436dc2-498f-f405-b4b5-c1c9a4a0be7b@simark.ca \
--to=simark@simark.ca \
--cc=gdb-patches@sourceware.org \
--cc=tankut.baris.aktemur@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox