unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: Assertion failure in set_iterator_to_next
Date: Mon, 12 Apr 2010 00:12:08 +0300	[thread overview]
Message-ID: <83zl19y9qv.fsf@gnu.org> (raw)
In-Reply-To: <jwv7hodzrlz.fsf-monnier+emacs@gnu.org>

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: emacs-devel@gnu.org
> Date: Sun, 11 Apr 2010 16:04:05 -0400
> 
> >       /* Get the next character, maybe multibyte.  */
> >       p = BYTE_POS_ADDR (IT_BYTEPOS (*it));
> >       if (it->multibyte_p && !ASCII_BYTE_P (*p))
> >         it-> c = STRING_CHAR_AND_LENGTH (p, it->len);     <<<<<<<<<
> >       else
> >         it-> c = *p, it->len = 1;                         <<<<<<<<<
> 
> Oh, thank you very much.  I searched for this spot and couldn't find it
> (I grepped with a pattern like "->len =", which only caught the second
> line which couldn't explain why I was getting it->len==3.
> That should help me move forward.
> 
> > Since you are saying this is an ASCII buffer, are charpos and bytepos
> > at least identical?
> 
> Yes, they're identical before the assignment to IT_CHARPOS and
> IT_BYTEPOS, but since it->len==3 a discrepancy of 2 appears which then
> triggers the subsequent xassert.

If this is an all-ASCII buffer, you should be able to say

  (gdb) watch it->len if it->len > 1

and see all the possible suspects.  I would suggest to invoke
"M-x redraw-display" after setting this watchpoint, because that
performs a full redisplay and will iterate over all the characters in
the buffer, its overlays, etc.

You may also find the following commands handy for tracking this
issue:

  (gdb) pit

  (gdb) pgrowx it->glyph_row

The first will show you the current state of the iterator (struct it),
the latter will show the glyphs that have been assembled so far in the
line that is being produced, together with the source (buffer, string,
etc.) from which every glyph comes.  Just remember that using `pit' at
arbitrary places may catch it out of sync, like it->c and it->len that
do not match IT_CHARPOS(*it).

You can also display previously produced glyph rows like this:

  (gdb) pgrowx it->glyph_row - 1
  (gdb) pgrowx it->glyph_row - 2

etc., you get the point.  Finally,

  (gdb) pgrowx MATRIX_ROW(it->w->desired_matrix,N)

will display the Nth glyph row of the glyph matrix being constructed,
which will normally be the Nth screen line (zero-based) on the updated
display of the window it->w.




  reply	other threads:[~2010-04-11 21:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-11  0:52 Assertion failure in set_iterator_to_next Stefan Monnier
2010-04-11  3:14 ` Eli Zaretskii
2010-04-11 15:02   ` Stefan Monnier
2010-04-11 18:14     ` Eli Zaretskii
2010-04-11 20:04       ` Stefan Monnier
2010-04-11 21:12         ` Eli Zaretskii [this message]
2010-04-19 15:30         ` Eli Zaretskii

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83zl19y9qv.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).