[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Hang while scrolling buffer with PNG images
From: |
Ralf Angeli |
Subject: |
Re: Hang while scrolling buffer with PNG images |
Date: |
Mon, 8 Sep 2003 12:28:48 +0200 |
User-agent: |
Mutt/1.5.4i |
* Richard Stallman (2003-09-07,16:23) writes:
> Can you please try following the instructions given in
> etc/DEBUG for debugging an infinite loop?
Thank you for that pointer. I was not aware of such a document.
Following the instructions I found that an infinite loop occurs at
three different points:
==========================
(gdb) finish
Run till exit from #0 move_it_vertically_backward (it=0xbfffe160,
dy=1)
at xdisp.c:5862
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
scroll_step=1, temp_scroll_step=0, last_line_misfit=-1073749664)
at xdisp.c:10820
10820 scroll_margin_pos = it.current.pos;
(gdb) finish
Run till exit from #0 try_scrolling (window=1213625160,
just_this_one_p=1,
scroll_conservatively=0, scroll_step=1, temp_scroll_step=0,
last_line_misfit=-1073749664) at xdisp.c:10820
==========================
(gdb) finish
Run till exit from #0 start_display (it=0xbfffe160, w=0xbfffe160,
pos=
{charpos = 2932, bytepos = 2949}) at xdisp.c:2203
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
scroll_step=1, temp_scroll_step=0, last_line_misfit=-1073749664)
at xdisp.c:10819
10819 move_it_vertically (&it, - end_scroll_margin);
(gdb) finish
Run till exit from #0 try_scrolling (window=1213625160,
just_this_one_p=1,
scroll_conservatively=0, scroll_step=1, temp_scroll_step=0,
last_line_misfit=-1073749664) at xdisp.c:10819
==========================
(gdb) finish
Run till exit from #0 0x080725b8 in try_window (window=1213625160,
pos=
{charpos = -1073750304, bytepos = 1055}) at xdisp.c:12034
0x0806eebf in try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, scroll_step=1, temp_scroll_step=0,
last_line_misfit=1055) at xdisp.c:10937
10937 if (!try_window (window, startp))
Value returned is $58 = 1
(gdb) finish
Run till exit from #0 0x0806eebf in try_scrolling
(window=1213625160,
just_this_one_p=1, scroll_conservatively=0, scroll_step=1,
temp_scroll_step=0, last_line_misfit=1055) at xdisp.c:10937
==========================
Most of the time it is the last one.
I went through the last one with `step':
==========================
(gdb) finish
Run till exit from #0 0x080725b8 in try_window (window=1213625160,
pos=
{charpos = -1073750304, bytepos = 1055}) at xdisp.c:12034
0x0806eebf in try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0, scroll_step=1, temp_scroll_step=0,
last_line_misfit=1055) at xdisp.c:10937
10937 if (!try_window (window, startp))
Value returned is $179 = 1
(gdb) step
10939 else if (w->cursor.vpos < 0)
(gdb) step
10947 if (!just_this_one_p
(gdb) step
10954 if (! make_cursor_line_fully_visible (w))
(gdb) step
make_cursor_line_fully_visible (w=0x41f) at xdisp.c:10659
10659 {
(gdb) step
10666 if (w->cursor.vpos < 0)
(gdb) step
10659 {
(gdb) step
10666 if (w->cursor.vpos < 0)
(gdb) step
10669 matrix = w->desired_matrix;
(gdb) step
10670 row = MATRIX_ROW (matrix, w->cursor.vpos);
(gdb) step
10673 if (!MATRIX_ROW_PARTIALLY_VISIBLE_P (row))
(gdb) step
971 struct frame *f = XFRAME (w->frame);
(gdb)
972 int height = WINDOW_TOTAL_HEIGHT (w);
(gdb)
982 if (WINDOW_WANTS_MODELINE_P (w))
(gdb)
972 int height = WINDOW_TOTAL_HEIGHT (w);
(gdb)
982 if (WINDOW_WANTS_MODELINE_P (w))
(gdb)
985 = (w->current_matrix && w->current_matrix->rows
(gdb)
988 if (ml_row && ml_row->mode_line_p)
(gdb)
989 height -= ml_row->height;
(gdb)
994 if (WINDOW_WANTS_HEADER_LINE_P (w))
(gdb)
1004 }
(gdb)
10679 if (row->height >= window_height)
(gdb)
10721 }
(gdb)
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
scroll_step=1, temp_scroll_step=0, last_line_misfit=1055) at
xdisp.c:10956
10956 clear_glyph_matrix (w->desired_matrix);
(gdb)
10957 last_line_misfit = 1;
(gdb)
10956 clear_glyph_matrix (w->desired_matrix);
(gdb)
clear_glyph_matrix (matrix=0x858fe60) at dispnew.c:966
966 if (matrix)
(gdb)
968 enable_glyph_matrix_rows (matrix, 0, matrix->nrows, 0);
(gdb)
enable_glyph_matrix_rows (matrix=0x858fe60, start=0, end=54,
enabled_p=0)
at dispnew.c:947
947 for (; start < end; ++start)
(gdb)
948 matrix->rows[start].enabled_p = enabled_p != 0;
(gdb)
947 for (; start < end; ++start)
(gdb)
948 matrix->rows[start].enabled_p = enabled_p != 0;
[ many of these ]
948 matrix->rows[start].enabled_p = enabled_p != 0;
(gdb)
947 for (; start < end; ++start)
(gdb)
949 }
(gdb)
clear_glyph_matrix (matrix=0x858fe60) at dispnew.c:969
969 matrix->no_scrolling_p = 0;
(gdb)
971 }
(gdb)
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
scroll_step=1, temp_scroll_step=0, last_line_misfit=1) at
xdisp.c:10958
10958 goto too_near_end;
(gdb)
10812 CHARPOS (scroll_margin_pos) = XINT (window_end);
(gdb)
10813 BYTEPOS (scroll_margin_pos) = CHAR_TO_BYTE (CHARPOS
(scroll_margin_pos));
(gdb)
buf_charpos_to_bytepos (b=0x858d828, charpos=2932) at marker.c:140
140 if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
(gdb)
144 best_above_byte = BUF_Z_BYTE (b);
(gdb)
143 best_above = BUF_Z (b);
(gdb)
149 if (best_above == best_above_byte)
(gdb)
144 best_above_byte = BUF_Z_BYTE (b);
(gdb)
149 if (best_above == best_above_byte)
(gdb)
152 best_below = BEG;
(gdb)
164 CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
(gdb)
153 best_below_byte = BEG_BYTE;
(gdb)
164 CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
(gdb)
0x08107218 170 CONSIDER (cached_charpos, cached_bytepos);
(gdb)
165 CONSIDER (BUF_GPT (b), BUF_GPT_BYTE (b));
(gdb)
166 CONSIDER (BUF_BEGV (b), BUF_BEGV_BYTE (b));
(gdb)
0x081071ab 170 CONSIDER (cached_charpos, cached_bytepos);
(gdb)
167 CONSIDER (BUF_ZV (b), BUF_ZV_BYTE (b));
(gdb)
169 if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
(gdb)
170 CONSIDER (cached_charpos, cached_bytepos);
(gdb)
172 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
(gdb)
174 CONSIDER (tail->charpos, tail->bytepos);
(gdb)
179 if (best_above - best_below < 50)
(gdb)
172 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
(gdb)
174 CONSIDER (tail->charpos, tail->bytepos);
(gdb)
179 if (best_above - best_below < 50)
(gdb)
[ many, many of these ]
(gdb)
try_scrolling (window=1213625160, just_this_one_p=1,
scroll_conservatively=0,
scroll_step=1, temp_scroll_step=0, last_line_misfit=1) at
xdisp.c:10815
10815 end_scroll_margin = this_scroll_margin + !!last_line_misfit;
(gdb)
10816 if (end_scroll_margin)
(gdb)
10818 start_display (&it, w, scroll_margin_pos);
(gdb)
10819 move_it_vertically (&it, - end_scroll_margin);
(gdb)
10818 start_display (&it, w, scroll_margin_pos);
(gdb)
start_display (it=0x8567348, w=0x8567348, pos=
{charpos = -1073749664, bytepos = -1}) at xdisp.c:2198
==========================
After that it goes on and on without producing some kind of special
pattern or loop I could identify. You can sit there, hold the return
key for minutes and somewhere there will be something knew, breaking a
pattern I thought I could identify. Am I missing here something? I
thought that I would find a infinite loop somewhere while stepping
through it. But this could be due to my limited knowledge of
debugging. Any hints are welcome. Hopefully this is useful
nevertheless.
Regards,
Ralf