Re: Could anyone give a short info on tracking refcounting bugs?
- From: "Jasper St. Pierre" <jstpierre mecheye net>
- To: Tristan Van Berkom <tvb gnome org>
- Cc: gtk-list gnome org
- Subject: Re: Could anyone give a short info on tracking refcounting bugs?
- Date: Sun, 7 Oct 2012 00:16:54 -0400
There's a systemtap script you can use that Alex wrote a little while
ago. Try that out.
http://blogs.gnome.org/alexl/2010/01/04/tracing-glib/
http://tecnocode.co.uk/2010/07/13/reference-count-debugging-with-systemtap/
Hopefully this gets you on the right track!
On Sun, Oct 7, 2012 at 12:13 AM, Tristan Van Berkom <tvb gnome org> wrote:
> On Sun, Oct 7, 2012 at 3:34 AM, marcin saepia net <marcin saepia net> wrote:
>> Dear all,
>>
>> I am googling for a tool for debugging refcount bugs in my GObject-based apps.
>>
>> I've found refdbg, but unfortunately, on ubuntu 12.04 instructions
>> from this readme [1] do not work. There is only one package,
>> libglib2.0-0-refdbg which seems to be just a GLib build with slightly
>> changed configure options, and it is obviously libglib not libgobject.
>>
>> So I've compiled refdbg by myself.
>>
>>
>>
>> It throws errors...
>>
>> $ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/refdbg refdbg src/myapp -c
>> config.xml
>> /usr/bin/refdbg: 113: /usr/bin/refdbg: Syntax error: Bad for loop variable
>>
>> ...but I've found that it just prepends command with
>> LD_PRELOAD=/usr/lib/librefdbg.so
>>
>>
>>
>> but running it manually also gives an error
>>
>> $ LD_PRELOAD=/usr/lib/librefdbg.so
>> LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/refdbg refdbg src/myapp -c
>> config.xml
>>
>> RefDbg 1.2 init
>>
>> (process:447): RefDbg-CRITICAL **: LD_PRELOAD function override not
>> working. Need to build glib with --disable-visibility? (See README),
>> aborting..
>>
>>
>> I've found that ubuntu's libglib2.0-0-refdbg package builder appends
>> only --disable-Bsymbolic option to glib, and --disable-visibility was
>> intentionally removed according to its debian changelog.
>>
>> So I've manually updated debian/rules to rebuild the package and add
>> --disable-visibility but glib's configure scripts throws an error
>>
>> configure: WARNING: unrecognized options: --disable-visibility
>>
>> I am stuck.
>>
>>
>>
>> What am I doing wrong?
>>
>> Is there any civilized way to debug GObject refcount bugs?
>>
>>
>> What exactly means "intercepted" in the last sentence from official
>> "Debugging reference count problems" page from docs [2]?
>
> Hi,
> I've never heard of this tool but certainly would like to use it
> in the next rare case that a bad ref-counting bug catches me ;-)
>
> By 'intercepting' I presume it means it logs the stack trace for
> every g_object_ref()/g_object_unref() call, and filters the output
> according to a particular object which you know to have some
> imbalanced ref count at the end of the day.
>
> Traditional / tedious method for tracking this sort of thing:
>
> a.) You of course need to know what object is either leaking
> or unreffed after finalization (which GObject will have
> an imbalanced ref).
>
> b.) Start your program under gdb and set a break point where
> the object will be created
>
> c.) After seeing your program create the object initially,
> Set a watchpoint on it's ref count, i.e.:
> (gdb) watch ((GObject *)0xADDRESS)->ref_count
>
> d.) Pull out your trusty notebook and note down every time
> that object's ref count changes, watch the stack traces as
> they go by (or tell gdb to log output to a file and just
> type 'where'/'continue' repeatedly until the program finishes
> or crashes).
>
> There will be a lot of noise from extra safety ref/unref calls
> from g_signal_emit(), property notifications
> and such, try to filter them out and find the higher level
> places where the object was reffed/unreffed from application
> code.
>
>
>
> After creating this report by hand, it's usually quite simple to see
> where your object is over/under referenced (but it certainly is nice
> to see that there is some efforts made towards automating the
> creation of such a report).
>
> Cheers,
> -Tristan
> _______________________________________________
> gtk-list mailing list
> gtk-list gnome org
> https://mail.gnome.org/mailman/listinfo/gtk-list
--
Jasper
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]