Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jerome Guitton <guitton@adacore.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: Pedro Alves <pedro@codesourcery.com>,
	gdb-patches@sourceware.org,	Tom Tromey <tromey@redhat.com>,
	Sergio Durigan Junior <sergiodj@redhat.com>
Subject: Re: [PATCH 2/6] Introduce `pre_expanded sals'
Date: Tue, 03 May 2011 16:09:00 -0000	[thread overview]
Message-ID: <20110503160903.GA27067@adacore.com> (raw)
In-Reply-To: <20110412115308.GA384@host1.jankratochvil.net>

Jan Kratochvil (jan.kratochvil@redhat.com):

> With the "new" (for some years) syntax `enable X.Y' ane `disable X.Y' one can
> control which breakpoints are active easily.
> 
> (gdb) break C::C
> Breakpoint 1 at 0x7d1: file ./gdb.cp/re-set-overloaded.cc, line 22.
> Breakpoint 2 at 0x7ba: file ./gdb.cp/re-set-overloaded.cc, line 21. (2 locations)
> warning: Multiple breakpoints were set.
> Use the "delete" command to delete unwanted breakpoints.
> (gdb) disable 2.2
> (gdb) info breakpoints 
> Num     Type           Disp Enb Address            What
> 1       breakpoint     keep y   0x00000000000007d1 in C::C(int) at ./gdb.cp/re-set-overloaded.cc:22
> 2       breakpoint     keep y   <MULTIPLE>         
> 2.1                         y     0x00000000000007ba in C::C() at ./gdb.cp/re-set-overloaded.cc:21
> 2.2                         n     0x00000000000007c4 in C::C() at ./gdb.cp/re-set-overloaded.cc:21
> 
> So that `set multiple-symbols ask' could be removed (probably
> completely incl.  the `cancel' option).


On the contrary, I was wondering if a proper use of the 'ask/all' option
was not precisely the solution here. 'all' would mean: break on any
location that matches the linespec given by the user. If a dll is loaded
that have a location that matches this linespec, then add a new location
for this breakpoint.

On 'ask', you would be asked only for instances that have a different
canonical location, e.g.

(break) C::C
[0] cancel
[1] all
[2] C::C() at ./gdb.cp/re-set-overloaded.cc:21
[3] C::C(int) at ./gdb.cp/re-set-overloaded.cc:22
> 

Choosing 'all' would trigger a multi-location breakpoint and behave
like above.  Selecting some would generate different single-location
breakpoints on the canonical location.

We may even have a command to edit an "all" breakpoint and convert it
into a list of selected single-location breakpoints. It may be easier
to manage than 3-tiers.

(break) breakpoint-edit 1
[0] cancel
[1] all
[2] C::C() at ./gdb.cp/re-set-overloaded.cc:21
[3] C::C(int) at ./gdb.cp/re-set-overloaded.cc:22
> 

Now Tom's question remains: what happens if a unambiguous breakpoint
location becomes ambiguous at dll load? I would suppose that the
appropriate behavior would depend on the 'all/ask' setting: 'all'
means all, so new locations are added, the breakpoints, becomes a
multi-location breakpoint. 'ask' is the main problem. the appropriate
behavior would certainly be to ask the user if the breakpoint should
become 'all' or should be canonicalized. The second option could be a
problem, I suppose. A compromise would be to convert inconditionally to 'all'
with a warning, letting the user edit the breakpoint latter to convert it
into selected single-location breakpoints if he/she wants.


> I find the current two kinds of multiple breakpoints confusing to users (at
> least to myself).

I can only agree. From a user point of view, I feel that homonyms, generics
and inlining should be handled the same way; the distinction that I
need is the 'all/ask' one: either I break on all locations of a
breakpoint (homonyms, generic, inlining, whatever), and add any new
location that a dll load would bring; or I want to select some of them
(presumably one) and have breakpoints on these ones only, and never
add new breakpoints if new occurences are brought by a dll.


  parent reply	other threads:[~2011-05-03 16:09 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-04  3:08 Sergio Durigan Junior
2011-04-06 20:13 ` Tom Tromey
2011-04-12 11:18   ` Pedro Alves
2011-04-12 11:53     ` Jan Kratochvil
2011-04-12 13:30       ` Pedro Alves
2011-04-12 20:34         ` Tom Tromey
2011-04-12 22:22         ` Matt Rice
2011-04-13  9:53           ` Eli Zaretskii
2011-07-27 17:08         ` Tom Tromey
2011-07-29 20:36           ` Sergio Durigan Junior
2011-08-04 20:41             ` Tom Tromey
2011-08-05  3:41               ` Sergio Durigan Junior
2011-08-05 14:40                 ` Tom Tromey
2011-08-05 18:06                   ` Sergio Durigan Junior
2011-08-10 14:24           ` Tom Tromey
2011-05-03 16:09       ` Jerome Guitton [this message]
2011-05-03 18:17         ` Joel Brobecker
2011-04-12 20:26     ` Tom Tromey
2011-04-13  9:51       ` Eli Zaretskii
2011-04-13 19:20         ` Tom Tromey
2011-04-15 10:37           ` Eli Zaretskii
2011-04-18 18:37       ` Pedro Alves
2011-04-27 18:02         ` Jan Kratochvil
2011-04-29 20:42         ` Tom Tromey
2011-04-11 21:08 ` Jan Kratochvil

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=20110503160903.GA27067@adacore.com \
    --to=guitton@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=pedro@codesourcery.com \
    --cc=sergiodj@redhat.com \
    --cc=tromey@redhat.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