[cairo] Re: Using --sync and gdb to debug X protocol errors in GTK+-based programs

Carl Worth cworth at cworth.org
Wed Jun 22 22:01:27 PDT 2005


On Thu, 23 Jun 2005 13:39:54 +1000, Nigel Tao wrote:
> For the record, (I think that) the --sync is given to the run, not the
> gdb.

Drat. You're right. And now I've gone and archived the wrong
instructions. At least gdb now has the nifty:

	Make breakpoint pending on future shared library load? (y or [n]) y

thing. In the old days, one would have had to do a dance of:

	break main
	run --sync
	break gdk_x_error
	cont

> > The resulting stack trace should be very interesting to us, so please
> > send it along.
> 
> attached to fd.o bug 3604:
> https://bugs.freedesktop.org/show_bug.cgi?id=3604

Now we're in that confusing state where we could discuss things either
here or in bugzilla. I prefer to do things here, so I will.

Things have obviously gone wrong before this (note the negative offsets):

	#10 0xb7b361c8 in _fallback_composite (operator=3221220240, src=0xbfffeb90, mask=0xbfffeb90, dst=0xbfffeb90, src_x=-1073747056, src_y=-1073747056, mask_x=-1073747056, mask_y=-1073747056, dst_x=0, dst_y=0, width=200, height=10) at cairo-surface.c:490

But what looks really odd is:

	#11 0xb7b2e773 in _composite_trap_region (gstate=0x80a05f0, src=0xbfffeb90, operator=CAIRO_OPERATOR_OVER, dst=0xbfffeb90, trap_region=0x0, extents=0xbffff028) at cairo-gstate.c:1178
	#12 0xb7b2ed42 in _cairo_gstate_clip_and_composite_trapezoids (gstate=0x80a05f0, src=0x80a0918, operator=CAIRO_OPERATOR_OVER, dst=0x809fd30, traps=0xbffff080) at cairo-gstate.c:1427

Note that trap_region is NULL in the call to _composite_trap_region,
but the calling code has

            if (trap_region) {
                /* For a simple rectangle, we can just use composite(), for more
                 * rectangles, we have to set a clip region. The cost of rasterizing
                 * trapezoids is pretty high for most backends currently, so it's
                 * worthwhile even if a region is needed.
                 */
                status = _composite_trap_region (gstate, src, operator, dst,
                                                 trap_region, &extents);

It'd be nice to be able to poke around a system exhibiting this, so if
we can figure out how to replicate it that would be quite helpful.

-Carl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050622/b982dad3/attachment.pgp


More information about the cairo mailing list