public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
From: James Ingham <jingham@cygnus.com>
To: lduperval@sprint.ca
Cc: Insight Mailing List <insight@sourceware.cygnus.com>
Subject: Re: Debugging Gimp plugins
Date: Tue, 08 Feb 2000 17:51:00 -0000	[thread overview]
Message-ID: <14496.51375.366587.139676@leda.cygnus.com> (raw)
In-Reply-To: <200002090134.UAA18763@hme0.smtp04.sprint.ca>

lduperval@sprint.ca,

I guess that I missed some of this discussion, so I don't know for
sure what is going on.  But if Gimp or Tcl is actively loading 
the module (rather than it getting pulled in automatically by the
loader) then either program is almost certainly doing this by calling
dlopen.  For instance, Tcl does this with the "load" command.

Try putting a break on dlopen, and then let 'er rip.  You can check
the "path" argument till it is your shared library, and when you get
to your module, you can just finish out of the dlopen code, and then
you will have real symbols.  Worth a try anyway.

Turns out that on most natives, gdb actually does something like this, 
breaking on the loader itself so that it can add the symbols when a
new library is loaded in.  What would be really useful is a gdb
command that says - when you load a library that matches this regexp,
break after the loader has done its job...  As far as I know, however, 
this does not exist at present.

Jim

 > On  8 Feb, Keith Seitz wrote:
 > > lduperval@sprint.ca wrote:
 > >> 
 > >> Hi,
 > >> 
 > >> If anyone has experience successfully debugging gimp plugins with
 > >> insight, please drop me a line. I can't figure out the proper way to do
 > >> it yet.
 > >> 
 > >> L
 > > 
 > > I don't know much about the Gimp (gasp!),
 > 
 > Hhhhhhhhhh!! Shame! Shame! :-)
 > 
 > > but I assume that it's plugins
 > > are just loadable modules (almost identical to shared libraries).
 > > 
 > 
 > I don't think so. I've looked at the source and it seems to be
 > socket-based. It looks like the plugin is a standalone program that
 > communicates with GIMP using sockets. But don't take my word for it.
 > 
 > So my situation is that I'm trying to write a Tcl-based extension (or at
 > least make an old one work with the new GIMP). It requires running a new
 > wish process. That wish process loads a dynamic module. And there are
 > some dependencies on shared libs also. I find it to be a debugging mess
 > but I thing it would be an even bigger mess for me to try to compile a
 > monolithic binary containing the Tcl, Tk, gtk, gdk, glib and my own libs
 > all in one.
 > 
 > > If so, I've found that the easiest way to debug them is to set
 > > breakpoints AFTER the module is loaded (i.e., after gdb knows about its
 > > symbols). For example, if there is a way to harmlessly load the module
 > > with the gimp, do that. Then interrupt the program and set your
 > > breakpoint(s) as normal.
 > > 
 > > If your module does something naughty before you can do this, you'll
 > > need to find out what function in Gimp loads the module and set a break
 > > there. After the module is loaded, its symbol table will be available to
 > > you.
 > > 
 > > The problem is that gdb doesn't know that modules even exist. If that
 > > wasn't bad enough, if you attempt to add symbols from the modules (via
 > > add-symbol-file), you'll need to know the starting address for the text
 > > of the the module (after it is loaded into memory, that is)! Yikes!
 > > 
 > 
 > Yikes is right. Someone on the gimp newsgroups suggested something
 > similar so I'll be trying it this week (provided I can get more than 10
 > minutes of work done). If it doesn't work, looks like I'll be going the
 > static compile route. Ugh!
 > 
 > Thanks for the suggestions.
 > 
 > L
 > 
 > 
 > 

-- 
++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++
Jim Ingham                                              jingham@redhat.com
Red Hat, Inc.                      

  reply	other threads:[~2000-02-08 17:51 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <38A03D0A.B906FD93@firetalk.com>
2000-02-08 17:34 ` lduperval
2000-02-08 17:51   ` James Ingham [this message]
2000-02-06 13:04 lduperval

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=14496.51375.366587.139676@leda.cygnus.com \
    --to=jingham@cygnus.com \
    --cc=insight@sourceware.cygnus.com \
    --cc=lduperval@sprint.ca \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).