From: Elena Zannoni <ezannoni@redhat.com>
To: Adam Fedor <fedor@doc.com>
Cc: "gdb-patches@sources.redhat.com" <gdb-patches@sources.redhat.com>
Subject: Re: [RFC]: Disallow ObjC search when resetting breakpoint.
Date: Thu, 06 Nov 2003 20:19:00 -0000 [thread overview]
Message-ID: <16298.44254.36492.73447@localhost.redhat.com> (raw)
In-Reply-To: <1066363062.1070.26.camel@localhost.localdomain>
Adam Fedor writes:
> This patch fixes PR objc/1238, where you get frustrating behavior if
> there is an ObjC method with the same name as a function:
>
> (gdb) break init
> [0] cancel
> [1] all
> [2] -[MyObject init] at gdb-objc-test.m:50
> [3] -[NewObject init] at gdb-objc-test.m:18
> [4] init at gdb-objc-test.m:62
> > 4
> Breakpoint 1 at 0x10001a40: file gdb-objc-test.m, line 62.
> (gdb) run
> Starting program:
> /home/users/fedor/src/gstep/Tester/shared_debug_obj/gdb-objc-test
> [0] cancel
> [1] all
> [2] -[MyObject init] at gdb-objc-test.m:50
> [3] -[NewObject init] at gdb-objc-test.m:18
> [4] init at gdb-objc-test.m:62
> > 0
> Error in re-setting breakpoint 1:
> canceled
> [Thread debugging using libthread_db enabled]
> [New Thread 16384 (LWP 2249)]
> [0] cancel
> [1] all
> [2] -[MyObject init] at gdb-objc-test.m:50
> [3] -[NewObject init] at gdb-objc-test.m:18
> [4] init at gdb-objc-test.m:62
> >
> [... on and on ad infinitum ...]
>
> What happens is that every time you try to reset a breakpoint,
> decode_line_1 gets called and we search through all the ObjC selectors
> for a match to the breakpoint and there are always multiple matches to
> "init".
>
> I don't particularly like the solution (It's the way Apple does it,
> although it might be for more reasons than this, e.g. there's no reason
> to go through the ObjC selector search when resetting a breakpoint
> anyway). I can't think of any other way to do it though, unless perhaps
> there is some way to canonicalize the symbol name for the breakpoint -
> so it's something like "gdb-objc-test.m:init", and not just "init" -
> then you won't get multiple matches.
>
> Any comments?
>
>
> 2003-10-16 Adam Fedor <fedor@gnu.org>
>
> * gdb/linespec.c (decode_line_1): Search for ObjC selectors
> only if allow_objc_selectors_flag.
> * gdb/breakpoint.c (breakpoint_re_set_one): Don't allow search
> for ObjC selectors when resetting a breakpoint.
>
> Index: gdb/breakpoint.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/breakpoint.c,v
> retrieving revision 1.132
> diff -u -p -r1.132 breakpoint.c
> --- gdb/breakpoint.c 13 Oct 2003 23:53:20 -0000 1.132
> +++ gdb/breakpoint.c 17 Oct 2003 03:41:32 -0000
> @@ -52,6 +52,8 @@
>
> #include "gdb-events.h"
>
> +extern int allow_objc_selectors_flag;
> +
> /* Prototypes for local functions. */
>
> static void until_break_command_continuation (struct continuation_arg *arg);
> @@ -6854,7 +6856,9 @@ breakpoint_re_set_one (void *bint)
> set_language (b->language);
> input_radix = b->input_radix;
> s = b->addr_string;
> + allow_objc_selectors_flag = 0;
> sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL);
> + allow_objc_selectors_flag = 1;
> for (i = 0; i < sals.nelts; i++)
> {
> resolve_sal_pc (&sals.sals[i]);
> Index: gdb/linespec.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/linespec.c,v
> retrieving revision 1.51
> diff -u -p -r1.51 linespec.c
> --- gdb/linespec.c 2 Aug 2003 03:59:40 -0000 1.51
> +++ gdb/linespec.c 17 Oct 2003 03:41:34 -0000
> @@ -36,6 +36,8 @@
> #include "objc-lang.h"
> #include "linespec.h"
>
> +int allow_objc_selectors_flag = 1;
> +
> /* We share this one with symtab.c, but it is not exported widely. */
>
> extern char *operator_chars (char *, char **);
> @@ -698,6 +700,7 @@ decode_line_1 (char **argptr, int funfir
>
> /* Check if the symbol could be an Objective-C selector. */
>
> + if (allow_objc_selectors_flag)
> {
> struct symtabs_and_lines values;
> values = decode_objc (argptr, funfirstline, NULL,
Hmm, not sure about this. Maybe it is the code that follows your new
'if' in decode_line_1 that should be changed. Definitely saving more
info in the breakpoints would be helpful.
Question: how does this work for overloaded functions in c++?
decode_line_1 calls decode_compounds, which calls find_method, which
calls decode_line_2, which asks the user. I would think a similar
problem arises there. If not, then can we make objc do the same thing
that c++ does?
elena
next prev parent reply other threads:[~2003-11-06 20:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-17 4:02 Adam Fedor
2003-11-06 20:19 ` Elena Zannoni [this message]
2003-11-06 20:27 ` Daniel Jacobowitz
2003-11-06 21:03 ` Elena Zannoni
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=16298.44254.36492.73447@localhost.redhat.com \
--to=ezannoni@redhat.com \
--cc=fedor@doc.com \
--cc=gdb-patches@sources.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