From: Daniel Jacobowitz <drow@mvista.com>
To: Joel Brobecker <brobecker@gnat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC] Unexpected automatic language switch - get_frame_language()
Date: Wed, 10 Dec 2003 18:20:00 -0000 [thread overview]
Message-ID: <20031210182008.GA21929@nevyn.them.org> (raw)
In-Reply-To: <20031210181030.GI1296@gnat.com>
On Wed, Dec 10, 2003 at 01:10:30PM -0500, Joel Brobecker wrote:
> Before I start the discussion and maybe cause us to change our
> implementation, what is the feeling of the GDB maintainers in
> general. Suppose for instance that we would submit our current
> implementation for inclusion, would it be approved, or refused?
> Right now, here is our change against breakpoint.c relevant to this
> functionality:
>
> - At the begining of break_command_1, we do:
>
> +
> + /* Ada introduces some language-specific breakpoint syntax. Translate
> + to equivalent vanilla breakpoints. */
> + addr_start = arg = ada_breakpoint_rewrite (arg, &break_on_exception);
> +
>
> - There is also the special handling of this breakpoint. When such
> a breakpoint is hit, we print the exception name in the breakpoint
> message. Something like this:
>
> Breakpoint 1, CONSTRAINT_ERROR at file:line.
>
> So we added the following call in print_one_breakpoint() to
> that effect:
>
> + ada_print_exception_breakpoint_task (b);
> +
You may want to look in the archives for the breakpoint_ops and catch
exception patches I posted earlier this year; they're broader but do
essentially the same thing.
Personally I don't like this "language dependent breakpoint syntax"
idea. Here's one reason why: judging from your implementation I bet
that a breakpoint on the starting instruction of the exception raising
function will cause this magic to happen. With "catch exception" that
information is stored at a higher level, so you can break *0x08010102
and _not_ have GDB try to walk up a couple of frames.
Seems friendlier to me; I like to keep a line between GDB's
user-friendliness features and its abilities as a system debugger, for
when I'm trying to figure out why a language feature isn't working.
> > > For the user's convenience, when the breakpoint is hit, we automatically
> > > go up the call stack until we find a "user frame" (meaning a frame which
> > > has debug info and is not inside the GNAT runtime), and select that
> > > frame. So the user usually sees the location where the exception was
> > > raised, instead of the runtime machinery that triggers and handles the
> > > exception raise.
> >
> > Does the real frame show up in backtraces?
>
> Yes, here is what happens when hitting an exception breakpoint:
>
> Breakpoint 1, CONSTRAINT_ERROR at 0x08049457 in a () at a.adb:3
> 3 raise Constraint_Error;
> (gdb) bt
> #0 <__gnat_raise_nodefer_with_msg> (e=0x80548f8) at a-except.adb:863
> #1 0x0804bdce in ada.exceptions.raise_with_location_and_msg (e=0x80548f8,
> f=0x804fee7, l=3, m=0x80510cb) at a-except.adb:977
> #2 0x0804bc7d in <__gnat_raise_constraint_error_msg> (file=0x804fee7, line=3,
> msg=0x80510cb) at a-except.adb:853
> #3 0x0804bee9 in <__gnat_rcheck_04> (file=0x804fee7, line=3)
> at a-except.adb:1041
> #4 0x08049457 in a () at a.adb:3
> #5 0x0804942d in main (argc=1, argv=(system.address) 0xbffffa14,
> envp=(system.address) 0xbffffa1c) at b~a.adb:109
Hmm, that's quite nice.
> > What you're describing is what I tried to do for C++, but I couldn't
> > get it to work right. I'd love to unify this code.
>
> Me too. As a matter of fact, I think there is a lot that Ada & C++ have
> in common, but I know very little about C++, and I'd love to see the
> code being shared between the two. There is the symbol stuff (like name
> mangling, etc) that's currently under way, the handling of overloading, etc.
Time will tell :)
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
next prev parent reply other threads:[~2003-12-10 18:20 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-05 22:48 Joel Brobecker
2003-12-05 23:57 ` Michael Snyder
2003-12-06 0:18 ` Joel Brobecker
2003-12-06 0:28 ` Andrew Cagney
2003-12-10 1:50 ` Joel Brobecker
2003-12-10 16:14 ` Andrew Cagney
2003-12-10 17:42 ` Joel Brobecker
2003-12-06 0:42 ` Michael Snyder
2003-12-10 17:47 ` Daniel Jacobowitz
2003-12-10 18:10 ` Joel Brobecker
2003-12-10 18:20 ` Daniel Jacobowitz [this message]
2003-12-10 19:16 ` Joel Brobecker
2003-12-10 19:18 ` Daniel Jacobowitz
2003-12-10 18:33 ` Ada's throw/catch; Was: " Andrew Cagney
2003-12-10 19:04 ` Joel Brobecker
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=20031210182008.GA21929@nevyn.them.org \
--to=drow@mvista.com \
--cc=brobecker@gnat.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