Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Jason Molenda <jmolenda@apple.com>
To: Kris Warkentin <kewarken@qnx.com>
Cc: "Gdb@Sources.Redhat.Com" <gdb@sources.redhat.com>
Subject: Re: [rfc] Print solib events in mi-mode
Date: Wed, 09 Jul 2003 20:38:00 -0000	[thread overview]
Message-ID: <55757AD0-B24D-11D7-9281-000393D457E2@apple.com> (raw)
In-Reply-To: <062401c34590$97cd09b0$0202040a@catdog>

Hi Kris,

On Tuesday, July 8, 2003, at 1:36 PM, Kris Warkentin wrote:

> What do you think of something like this?  When stop-on-solib-events  
> is set,
> this will print the reason as being a shared-lib-event.

For what it's worth, at Apple we do something very similar.  This  
section of code in breakpoint.c reads:

     case bp_shlib_event:
       /* Did we stop because the user set the stop_on_solib_events
          variable?  (If so, we report this as a generic, "Stopped due
          to shlib event" message.) */
       if (interpreter_p && strncmp (interpreter_p, "mi", 2) == 0)
         ui_out_field_string (uiout, "reason", "shlib-event");
       else
         printf_filtered ("Stopped due to shared library event\n");
       return PRINT_NOTHING;
       break;

For the case where stop-on-shlibs-added is not set, we have an MI  
notification that gets posted each time a shared library is loaded.  It  
looks like this to the UI side:

=shlibs-updated
=shlibs-added,shlib-info=[num="54",name="SKTDrawDocument.ob",kind="- 
",dyld-addr="0x271000",reason="dyld",requested- 
state="?",state="N",path="/Developer/Examples/AppKit/Sketch/build/ 
Sketch.build/Sketch  
(Upgraded).build/Objects-normal/ppc/ 
SKTDrawDocument.ob",slide="",addr="",prefix=""]
~"Re-enabling shared library breakpoints: 1\n"
<-  
=shlibs-added,shlib-info=[num="55",name="SKTGraphic.ob",kind="-",dyld- 
addr="0x28a000",reason="dyld",requested-state="?",state="N",path="/ 
Developer/Examples/AppKit/Sketch/build/Sketch.build/Sketch  
(Upgraded).build/Objects-normal/ppc/ 
SKTGraphic.ob",slide="",addr="",prefix=""]


In our case, this message is emitted by one of our arch-specific files,  
macosx/macosx-nat-dyld.c, in a function called macosx_solib_add().


> Our Eclipse team wants to be able to set breakpoints in shared  
> libraries
> that aren't loaded yet.  If they get notification of shlib-events,  
> then they
> can re-examine the list of loaded libraries and set any breakpoints  
> that
> have been enabled in the project's libs.

We handled this problem by creating a new breakpoint command,  
"future-break" (short: "fb", done in MI as "-break-insert -f ...").   
This pushes the logic down in to gdb.  On the one hand, it's expensive  
to have gdb trying to set this breakpoint for every shared library that  
comes in (when you have a lot of big shared libraries like we do on  
MacOS X), but at the same time if the IDE is responsible for setting  
breakpoints in shared libraries then you'll have to stop on each solib  
add event to set those breakpoints before anything runs...

You can see all of this in the above sample; breakpoint #1 was a  
file:line breakpoint, which was in SKTGraphic.ob.  When SKTGraphic.ob  
was paged in (this is a project using ZeroLink, so each source file is  
a separate objfile, pulled in at run-time as needed), the breakpoint  
was set by gdb.



The future-break patches were posted at least once in the past along  
with the save-breakpoints command; I can find a URL ref if anyone  
cares.

Jason

>
> cheers,
>
> Kris
>
> $ cvs diff -u breakpoint.c
> Index: breakpoint.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/breakpoint.c,v
> retrieving revision 1.125
> diff -u -r1.125 breakpoint.c
> --- breakpoint.c        2 Jul 2003 16:24:00 -0000       1.125
> +++ breakpoint.c        8 Jul 2003 20:32:50 -0000
> @@ -2039,8 +2039,10 @@
>        /* Did we stop because the user set the stop_on_solib_events
>          variable?  (If so, we report this as a generic, "Stopped due
>          to shlib event" message.) */
> -      printf_filtered ("Stopped due to shared library event\n");
> -      return PRINT_NOTHING;
> +      ui_out_text (uiout, "\nShared library event ");
> +      if (ui_out_is_mi_like_p (uiout))
> +       ui_out_field_string (uiout, "reason", "shared-lib-event");
> +      return PRINT_SRC_ONLY;
>        break;
>
>      case bp_thread_event:
>
>


  parent reply	other threads:[~2003-07-09 20:38 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-08 20:35 Kris Warkentin
2003-07-08 21:02 ` Andrew Cagney
2003-07-09 12:24   ` Kris Warkentin
2003-07-09 15:09     ` Daniel Jacobowitz
2003-07-09 15:38       ` Kris Warkentin
2003-07-09 16:24         ` Daniel Jacobowitz
2003-07-09 17:29           ` Kris Warkentin
2003-07-09 17:41             ` Kevin Buettner
2003-07-09 17:49               ` Kris Warkentin
2003-07-09 18:01                 ` Kris Warkentin
2003-07-09 18:05                   ` Daniel Jacobowitz
2003-07-09 18:21                     ` Kris Warkentin
2003-07-09 18:30                       ` Daniel Jacobowitz
2003-07-09 19:12                         ` Kris Warkentin
2003-07-09 19:46                           ` Daniel Jacobowitz
2003-07-09 20:00                             ` Kris Warkentin
2003-07-09 20:03                               ` Daniel Jacobowitz
2003-07-18 16:12                 ` Andrew Cagney
2003-07-09 20:38 ` Jason Molenda [this message]
2003-07-10 12:23   ` Kris Warkentin
2003-07-10 16:33   ` Andrew Cagney

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=55757AD0-B24D-11D7-9281-000393D457E2@apple.com \
    --to=jmolenda@apple.com \
    --cc=gdb@sources.redhat.com \
    --cc=kewarken@qnx.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