Re: Could anyone give a short info on tracking refcounting bugs?



On Mon, Oct 8, 2012 at 2:47 AM, marcin saepia net <marcin saepia net> wrote:
> Tristan, Jasper,
>
> thank you for such quick response!
>
> I've created debug report from gdb and now I am seeking for unpaired ref/unref.
>
> Tristan, would you mind if I post a bugzilla bug about adding such
> quick tutorial to the docs at
> http://developer.gnome.org/gobject/stable/tools-refdb.html? I would
> like to use your mail as a starting point.

Sorry for late response.

Of course I don't mind that, it sounds as though the systemtap
stuff is interesting, evidently there have been multiple attempts at
approaching this GObject instrumentation problem ... so I hope
to see a winner emerge before I ever have to do this by hand again ;-)

For higher level languages, where it can be assumed that any
reference is accounted for by a given 'owner' object, the
pursuit of imbalanced reference counts can even be automated
and simplified. However these types of errors should be at least
diminished if not non-existent in languages that do ref-counting
for you, by way of automating references using declared variables
and their scopes... perhaps the instrumentation here needs to
be available at a low level (compiled into debug versions of
GObject, like the refdbg tool uses), or additionally... automated
on a per language binding basis... just food for thought...

Anyway, good luck ;-)

Cheers,
               -Tristan

>
> I've also found
> (https://bugzilla.gnome.org/show_bug.cgi?id=606044#c45) there was a
> suggestion to add info about using systemtap to docs, but I am unable
> to volunteer in such case because I had problems in running systemtap:
>
> $ stap --ldd debugging/alive.stp -c 'src/myapp -c config.xml'
> semantic error: probe point mismatch at position 0  (alternatives:
> __nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc
> _syscall _vfs begin begin(number) end end(number) error error(number)
> generic ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib
> irq_handler kernel kprobe kprocess linuxmib module(string) nd_syscall
> netdev never nfs nfsd perf process process(number) process(string)
> procfs procfs(string) scheduler scsi signal socket softirq stap
> staprun sunrpc syscall tcp tcpmib timer tty udp vfs vm workqueue):
> identifier 'gobject' at debugging/alive.stp:2:7 while resolving probe
> point gobject.object_new
>         source: probe gobject.object_new {
>                       ^
> semantic error: probe point mismatch at position 0  (alternatives:
> __nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc
> _syscall _vfs begin begin(number) end end(number) error error(number)
> generic ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib
> irq_handler kernel kprobe kprocess linuxmib module(string) nd_syscall
> netdev never nfs nfsd perf process process(number) process(string)
> procfs procfs(string) scheduler scsi signal socket softirq stap
> staprun sunrpc syscall tcp tcpmib timer tty udp vfs vm workqueue):
> identifier 'gobject' at :5:7 while resolving probe point
> gobject.object_finalize
>         source: probe gobject.object_finalize {
>                       ^
> Pass 2: analysis failed.  Try again with another '--vp 01' option.
>
>
> script was:
>
> global alive
> probe gobject.object_new {
>  alive[type]++
> }
> probe gobject.object_finalize {
>  alive[type]--
> }
> probe end {
>   printf ("Alive objects: \n")
>   foreach (a in alive) {
>    if (alive[a] > 0)
>      printf ("%d\t%s\n", alive[a], a)
>   }
> }
>
>
> --
> Marcin Lewandowski


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]