unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* How to debug Error during redisplay
@ 2013-01-11  9:03 Leo Liu
  2013-01-11 10:25 ` Eli Zaretskii
  2013-01-11 14:56 ` Stefan Monnier
  0 siblings, 2 replies; 20+ messages in thread
From: Leo Liu @ 2013-01-11  9:03 UTC (permalink / raw)
  To: emacs-devel

I have just noticed this (using 24.2.92) in the *message* buffer which I
cannot reproduce in emacs 24.2. Any idea how to debug this problem?

Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil)
Error during redisplay: (jit-lock-function 561) signaled (wrong-type-argument stringp nil)
Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil) [2 times]

Leo




^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11  9:03 How to debug Error during redisplay Leo Liu
@ 2013-01-11 10:25 ` Eli Zaretskii
  2013-01-11 11:02   ` Leo Liu
  2013-01-11 14:56 ` Stefan Monnier
  1 sibling, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-11 10:25 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From: Leo Liu <sdl.web@gmail.com>
> Date: Fri, 11 Jan 2013 17:03:38 +0800
> 
> I have just noticed this (using 24.2.92) in the *message* buffer which I
> cannot reproduce in emacs 24.2. Any idea how to debug this problem?

Run Emacs under GDB, put a breakpoint in safe_eval_handler, and see
which code and in which buffer is responsible.



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11 10:25 ` Eli Zaretskii
@ 2013-01-11 11:02   ` Leo Liu
  2013-01-11 14:08     ` Eli Zaretskii
  0 siblings, 1 reply; 20+ messages in thread
From: Leo Liu @ 2013-01-11 11:02 UTC (permalink / raw)
  To: emacs-devel

On 2013-01-11 18:25 +0800, Eli Zaretskii wrote:
> Run Emacs under GDB, put a breakpoint in safe_eval_handler, and see
> which code and in which buffer is responsible.

Thanks for the info; I have forgotten there is always GDB ;)

I don't know how to print current_buffer. I tried:

p current_buffer => $11 = (struct buffer *) 0x1015330a0
pr => 1079299112
xpr => Argument to arithmetic operation not a number or boolean.

But bt gives me this:

--------------------------------
Lisp Backtrace:
"redisplay_internal (C function)" (0x69d758)
"redisplay" (0x5fbf58a0)
"sit-for" (0x5fbf5f30)
"animate-string" (0x5fbf6480)
"if" (0x5fbf6990)
"let" (0x5fbf6cd0)
"progn" (0x5fbf6f30)
"if" (0x5fbf7190)
"slime-startup-message" (0x5fbf7428)
"funcall" (0x5fbf7420)
"slime-repl-update-banner" (0x5fbf7730)
"save-current-buffer" (0x5fbf7c50)
"slime-init-output-buffer" (0x5fbf7da0)
"slime-repl-connected-hook-function" (0x5fbf83c0)
"run-hooks" (0x5fbf83f0)
"let" (0x5fbf88f0)
"let" (0x5fbf8c30)
"ad-Orig-slime-set-connection-info" (0x5fbf8d80)
"with-no-warnings" (0x5fbf9320)
"setq" (0x5fbf9590)
"let" (0x5fbf98d0)
"slime-set-connection-info" (0x5fbf9b68)
"apply" (0x5fbf9c40)
0x5b1d840 Lisp type 6
"funcall" (0x5fbfa090)
"progn" (0x5fbfa4b0)
"if" (0x5fbfa710)
"let*" (0x5fbfaa30)
"progn" (0x5fbfac90)
"cond" (0x5fbfaf40)
"let*" (0x5fbfb260)
0x509f180 Lisp type 6
"apply" (0x5fbfb5b0)
0x5b1ce30 Lisp type 6
"slime-dispatch-event" (0x5fbfc0d0)
"slime-process-available-input" (0x5fbfc750)
"slime-net-filter" (0x5fbfcdc8)
--------------------------------

So this is triggered by animate-string which slime uses. Weirdly, the
same code doesn't have this error in 24.2.

Also if I set inhibit-eval-during-redisplay to t, the error is gone as
well.

Leo




^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11 11:02   ` Leo Liu
@ 2013-01-11 14:08     ` Eli Zaretskii
  2013-01-12  5:25       ` Leo Liu
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-11 14:08 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From: Leo Liu <sdl.web@gmail.com>
> Date: Fri, 11 Jan 2013 19:02:29 +0800
> 
> On 2013-01-11 18:25 +0800, Eli Zaretskii wrote:
> > Run Emacs under GDB, put a breakpoint in safe_eval_handler, and see
> > which code and in which buffer is responsible.
> 
> Thanks for the info; I have forgotten there is always GDB ;)
> 
> I don't know how to print current_buffer.

 (gdb) pp current_buffer->name_

or

 (gdb) p current_buffer->name_
 (gdb) xstring

> So this is triggered by animate-string which slime uses. Weirdly, the
> same code doesn't have this error in 24.2.

Which code is that? can you show it?  Or does any use of
animate-string trigger these messages?

> Also if I set inhibit-eval-during-redisplay to t, the error is gone as
> well.

This should not surprise you, since that flag inhibits evaluation of
Lisp expressions during redisplay, including whatever expression that
causes the error.



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11  9:03 How to debug Error during redisplay Leo Liu
  2013-01-11 10:25 ` Eli Zaretskii
@ 2013-01-11 14:56 ` Stefan Monnier
  2013-01-12  5:26   ` Leo Liu
  1 sibling, 1 reply; 20+ messages in thread
From: Stefan Monnier @ 2013-01-11 14:56 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> I have just noticed this (using 24.2.92) in the *message* buffer which I
> cannot reproduce in emacs 24.2. Any idea how to debug this problem?

> Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil)
> Error during redisplay: (jit-lock-function 561) signaled (wrong-type-argument stringp nil)
> Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil) [2 times]

You can try (setq font-lock-support-mode nil) then turn font-lock-mode off
and then back on, so as to make it not use jit-lock.  If you're lucky,
the same problem will occur, but this time it'll be in a context where
debug-on-error works.


        Stefan



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11 14:08     ` Eli Zaretskii
@ 2013-01-12  5:25       ` Leo Liu
  2013-01-12  9:43         ` Eli Zaretskii
  0 siblings, 1 reply; 20+ messages in thread
From: Leo Liu @ 2013-01-12  5:25 UTC (permalink / raw)
  To: emacs-devel

On 2013-01-11 22:08 +0800, Eli Zaretskii wrote:
>  (gdb) pp current_buffer->name_
>
> or
>
>  (gdb) p current_buffer->name_
>  (gdb) xstring

Thanks. I figured it out too by reading DEBUG more carefully.

>> So this is triggered by animate-string which slime uses. Weirdly, the
>> same code doesn't have this error in 24.2.
>
> Which code is that? can you show it?  Or does any use of
> animate-string trigger these messages?

I mean the slime package, the same one running in 24.2 and 24.2.92. It
seems to me that in 24.2.92, the code is able to continue without
waiting for animate-string to finish. It feels more responsive.

>> Also if I set inhibit-eval-during-redisplay to t, the error is gone as
>> well.
>
> This should not surprise you, since that flag inhibits evaluation of
> Lisp expressions during redisplay, including whatever expression that
> causes the error.

Thanks.

Leo




^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-11 14:56 ` Stefan Monnier
@ 2013-01-12  5:26   ` Leo Liu
  2013-01-12 13:08     ` Stefan Monnier
  0 siblings, 1 reply; 20+ messages in thread
From: Leo Liu @ 2013-01-12  5:26 UTC (permalink / raw)
  To: emacs-devel

On 2013-01-11 22:56 +0800, Stefan Monnier wrote:
> You can try (setq font-lock-support-mode nil) then turn font-lock-mode off
> and then back on, so as to make it not use jit-lock.  If you're lucky,
> the same problem will occur, but this time it'll be in a context where
> debug-on-error works.

But I couldn't get it to work. I did:

1. M-: (setq font-lock-support-mode nil)
2. M-x font-lock-mode
3. M-x font-lock-mode

Regards,
Leo




^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12  5:25       ` Leo Liu
@ 2013-01-12  9:43         ` Eli Zaretskii
  2013-01-12 11:56           ` Leo Liu
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-12  9:43 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From: Leo Liu <sdl.web@gmail.com>
> Date: Sat, 12 Jan 2013 13:25:10 +0800
> 
> >> So this is triggered by animate-string which slime uses. Weirdly, the
> >> same code doesn't have this error in 24.2.
> >
> > Which code is that? can you show it?  Or does any use of
> > animate-string trigger these messages?
> 
> I mean the slime package, the same one running in 24.2 and 24.2.92.

I downloaded the current snapshot of slime from
http://common-lisp.net/project/slime/.  Is this the package you are
talking about?  The only *.el file that calls animate-string there is
slime-banner.el:

  (defun slime-startup-message ()
    (when slime-header-line-p
      (setq header-line-format 
	    (format "%s  Port: %s  Pid: %s"
		    (slime-lisp-implementation-type)
		    (slime-connection-port (slime-connection))
		    (slime-pid))))
    (when (zerop (buffer-size))
      (let ((welcome (concat "; SLIME " (or (slime-changelog-date) 
					    "- ChangeLog file not found"))))
	(if slime-startup-animation
	    (animate-string welcome 0 0) 
	  (insert welcome)))))

Is this the code that produced the redisplay error messages?  If so, I
cannot reproduce this on my machine.  If this isn't the code in
question, then please show a minimal code snippet using animate-string
that does reproduce the problem.  (It isn't right to let me guess like
this, if you want the problem solved any time soon.)

> It seems to me that in 24.2.92, the code is able to continue without
> waiting for animate-string to finish. It feels more responsive.

I don't see how that could be true, but maybe I'm missing something.
In any case, is this a separate problem?



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12  9:43         ` Eli Zaretskii
@ 2013-01-12 11:56           ` Leo Liu
  2013-01-12 12:03             ` Leo Liu
  2013-01-12 12:30             ` Eli Zaretskii
  0 siblings, 2 replies; 20+ messages in thread
From: Leo Liu @ 2013-01-12 11:56 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2505 bytes --]

On 2013-01-12 17:43 +0800, Eli Zaretskii wrote:
> I downloaded the current snapshot of slime from
> http://common-lisp.net/project/slime/.  Is this the package you are
> talking about?  The only *.el file that calls animate-string there is
> slime-banner.el:
>
>   (defun slime-startup-message ()
>     (when slime-header-line-p
>       (setq header-line-format 
> 	    (format "%s  Port: %s  Pid: %s"
> 		    (slime-lisp-implementation-type)
> 		    (slime-connection-port (slime-connection))
> 		    (slime-pid))))
>     (when (zerop (buffer-size))
>       (let ((welcome (concat "; SLIME " (or (slime-changelog-date) 
> 					    "- ChangeLog file not found"))))
> 	(if slime-startup-animation
> 	    (animate-string welcome 0 0) 
> 	  (insert welcome)))))
>
> Is this the code that produced the redisplay error messages?  If so, I
> cannot reproduce this on my machine.  If this isn't the code in
> question, then please show a minimal code snippet using animate-string
> that does reproduce the problem.  (It isn't right to let me guess like
> this, if you want the problem solved any time soon.)

Thanks for taking the trouble to investigate the issue further. I have
just spent an hour to come up with this reproduction recipe.

1. Install adaptive-wrap.el from ELPA
2. Install sbcl or clisp or any CL supported by slime
1. Emacs -q -l t.el (t.el assumes sbcl, which you may want to change)
2. M-x slime

My whole *Messages* buffer looks like this:

--------------------------------
For information about GNU Emacs and the GNU system, type C-h C-a.
`flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'. [11 times]
Polling "/var/folders/mf/8_qnj_n146d0wxb32wdnb9jh0000gn/T/slime.13675" .. 1 (Abort with `M-x slime-abort-connection'.)
Polling "/var/folders/mf/8_qnj_n146d0wxb32wdnb9jh0000gn/T/slime.13675" .. 2 (Abort with `M-x slime-abort-connection'.)
Polling "/var/folders/mf/8_qnj_n146d0wxb32wdnb9jh0000gn/T/slime.13675" .. 3 (Abort with `M-x slime-abort-connection'.)
Polling "/var/folders/mf/8_qnj_n146d0wxb32wdnb9jh0000gn/T/slime.13675" .. 4 (Abort with `M-x slime-abort-connection'.)
Connecting to Swank on port 60501..
Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil)
Error during redisplay: (jit-lock-function 520) signaled (wrong-type-argument stringp nil)
Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp nil) [2 times]
Connected. Let the hacking commence!
--------------------------------


[-- Attachment #2: t.el --]
[-- Type: application/emacs-lisp, Size: 362 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 11:56           ` Leo Liu
@ 2013-01-12 12:03             ` Leo Liu
  2013-01-12 13:49               ` Eli Zaretskii
  2013-01-12 12:30             ` Eli Zaretskii
  1 sibling, 1 reply; 20+ messages in thread
From: Leo Liu @ 2013-01-12 12:03 UTC (permalink / raw)
  To: emacs-devel

On 2013-01-12 19:56 +0800, Leo Liu wrote:
> 1. Install adaptive-wrap.el from ELPA
> 2. Install sbcl or clisp or any CL supported by slime
> 1. Emacs -q -l t.el (t.el assumes sbcl, which you may want to change)
> 2. M-x slime

A simpler recipe is:

1. M-x adaptive-wrap-prefix-mode
2. (animate-string "hello" 0)

So no need for slime or cl.

Leo




^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 11:56           ` Leo Liu
  2013-01-12 12:03             ` Leo Liu
@ 2013-01-12 12:30             ` Eli Zaretskii
  1 sibling, 0 replies; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-12 12:30 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From: Leo Liu <sdl.web@gmail.com>
> Date: Sat, 12 Jan 2013 19:56:59 +0800
> 
> 1. Install adaptive-wrap.el from ELPA
> 2. Install sbcl or clisp or any CL supported by slime
> 1. Emacs -q -l t.el (t.el assumes sbcl, which you may want to change)
> 2. M-x slime

Thanks, so it sounds like the culprit might be adaptive-wrap, and not
slime or animate-string.

However, I hope there's a simpler way to debug this.  Please run Emacs
under GDB, put a breakpoint in Fstringp, where it is about to return
Qnil:

  DEFUN ("stringp", Fstringp, Sstringp, 1, 1, 0,
	 doc: /* Return t if OBJECT is a string.  */)
    (Lisp_Object object)
  {
    if (STRINGP (object))
      return Qt;
    return Qnil; <<<<<<<<<<<<<<<<<<<<<<<<
  }

and then run your recipe to reproduce the problem.  (I hope this
breakpoint won't break too many times in unrelated cases; if it does,
we can figure out a way to make the breakpoint smarter.)  When the
breakpoint breaks, the backtrace should tell us which Lisp code caused
it.  Please show both the C and Lisp parts of the backtrace.

Thanks.



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12  5:26   ` Leo Liu
@ 2013-01-12 13:08     ` Stefan Monnier
  2013-01-12 13:38       ` Leo Liu
  2013-01-12 13:52       ` Eli Zaretskii
  0 siblings, 2 replies; 20+ messages in thread
From: Stefan Monnier @ 2013-01-12 13:08 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

>> You can try (setq font-lock-support-mode nil) then turn font-lock-mode off
>> and then back on, so as to make it not use jit-lock.  If you're lucky,
>> the same problem will occur, but this time it'll be in a context where
>> debug-on-error works.
> But I couldn't get it to work. I did:
> 1. M-: (setq font-lock-support-mode nil)
> 2. M-x font-lock-mode
> 3. M-x font-lock-mode

Indeed, adaptive-wrap uses jit-lock directly and not font-lock, so the
above doesn't help.
We should really improve jit-lock.el to provide a "debugging mode" where
it somehow runs the code at some other time than during redisplay, so it
can be debugged better.


        Stefan



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:08     ` Stefan Monnier
@ 2013-01-12 13:38       ` Leo Liu
  2013-01-12 13:52       ` Eli Zaretskii
  1 sibling, 0 replies; 20+ messages in thread
From: Leo Liu @ 2013-01-12 13:38 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On 2013-01-12 21:08 +0800, Stefan Monnier wrote:
> We should really improve jit-lock.el to provide a "debugging mode" where
> it somehow runs the code at some other time than during redisplay, so it
> can be debugged better.

Is it possible to teach it to be verbose in this case?

In time of this, I find myself hoping the message can tell me which
function other than jit-lock-function has caused the error.

Leo



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 12:03             ` Leo Liu
@ 2013-01-12 13:49               ` Eli Zaretskii
  2013-01-12 13:58                 ` Leo Liu
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-12 13:49 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From: Leo Liu <sdl.web@gmail.com>
> Date: Sat, 12 Jan 2013 20:03:02 +0800
> 
> On 2013-01-12 19:56 +0800, Leo Liu wrote:
> > 1. Install adaptive-wrap.el from ELPA
> > 2. Install sbcl or clisp or any CL supported by slime
> > 1. Emacs -q -l t.el (t.el assumes sbcl, which you may want to change)
> > 2. M-x slime
> 
> A simpler recipe is:
> 
> 1. M-x adaptive-wrap-prefix-mode
> 2. (animate-string "hello" 0)
> 
> So no need for slime or cl.

Sorry, I cannot reproduce this here.  I did this:

 . M-x load-file RET elpa/packages/adaptive-wrap/adaptive-wrap.el RET

 . M-x adaptive-wrap-prefix-mode RET

 . M-: (animate-string "hello" 0) RET

And I don't see any error messages in *Messages*.

What am I doing wrong?



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:08     ` Stefan Monnier
  2013-01-12 13:38       ` Leo Liu
@ 2013-01-12 13:52       ` Eli Zaretskii
  2013-01-12 14:07         ` Leo Liu
  2013-01-12 14:38         ` Stefan Monnier
  1 sibling, 2 replies; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-12 13:52 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: sdl.web, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Sat, 12 Jan 2013 08:08:53 -0500
> Cc: emacs-devel@gnu.org
> 
> We should really improve jit-lock.el to provide a "debugging mode" where
> it somehow runs the code at some other time than during redisplay, so it
> can be debugged better.

Or provide a debugging mode in safe_eval, so that it would, e.g., save
a backtrace in some variable, instead of showing just the innermost
expression that threw an error.



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:49               ` Eli Zaretskii
@ 2013-01-12 13:58                 ` Leo Liu
  2013-01-12 14:31                   ` Eli Zaretskii
  0 siblings, 1 reply; 20+ messages in thread
From: Leo Liu @ 2013-01-12 13:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On 2013-01-12 21:49 +0800, Eli Zaretskii wrote:
>  . M-: (animate-string "hello" 0) RET
>
> And I don't see any error messages in *Messages*.

Your frame needs to be a wide as possible so that the inserted string by
animate-string is visible.

Leo



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:52       ` Eli Zaretskii
@ 2013-01-12 14:07         ` Leo Liu
  2013-01-12 14:38         ` Stefan Monnier
  1 sibling, 0 replies; 20+ messages in thread
From: Leo Liu @ 2013-01-12 14:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, emacs-devel

On 2013-01-12 21:52 +0800, Eli Zaretskii wrote:
> Or provide a debugging mode in safe_eval, so that it would, e.g., save
> a backtrace in some variable, instead of showing just the innermost
> expression that threw an error.

+1

Leo



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:58                 ` Leo Liu
@ 2013-01-12 14:31                   ` Eli Zaretskii
  2013-01-12 17:17                     ` Stephen Berman
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2013-01-12 14:31 UTC (permalink / raw)
  To: Leo Liu; +Cc: emacs-devel

> From:  Leo Liu <sdl.web@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Sat, 12 Jan 2013 21:58:20 +0800
> 
> On 2013-01-12 21:49 +0800, Eli Zaretskii wrote:
> >  . M-: (animate-string "hello" 0) RET
> >
> > And I don't see any error messages in *Messages*.
> 
> Your frame needs to be a wide as possible so that the inserted string by
> animate-string is visible.

Thanks, that was the missing link.  The backtrace is below, I hope
this will allow to fix adaptive-wrap.

For the record, here's how I got it caught red-handed:

 $ gdb ./emacs
 (gdb) break wrong_type_argument
 (gdb) r -Q

  Now do whatever it takes to reproduce the problem, and the
  breakpoint will break.

Evidently, the bug is here:

  (defun adaptive-wrap-fill-context-prefix (beg en)
    "Like `fill-context-prefix', but with length adjusted by `adaptive-wrap-extra-indent'."
    (let* ((fcp (fill-context-prefix beg en))
	   (fcp-len (string-width fcp))   <<<<<<<<<<<<<<<<<<<

It looks like this function doesn't expect that fill-context-prefix
could return nil.  But the ELisp manual says:

     Usually, this function returns the fill prefix, a string.  However,
     before doing this, the function makes a final check (not specially
     mentioned in the following) that a line starting with this prefix
     wouldn't look like the start of a paragraph.  Should this happen,
     the function signals the anomaly by returning `nil' instead.
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Here's the backtrace:

  Breakpoint 3, wrong_type_argument (predicate=56455034, value=56403994)
      at data.c:99
  99        xsignal2 (Qwrong_type_argument, predicate, value);
  (gdb) bt
  #0  wrong_type_argument (predicate=56455034, value=56403994) at data.c:99
  #1  0x01290bd4 in Fstring_width (str=56403994) at character.c:501
  #2  0x010131a1 in eval_sub (form=60154182) at eval.c:2037
  #3  0x0100fdfb in FletX (args=60186150) at eval.c:723
  #4  0x01012d17 in eval_sub (form=60154846) at eval.c:1985
  #5  0x0100f188 in Fprogn (args=60184958) at eval.c:359
  #6  0x01015c8c in funcall_lambda (fun=60184862, nargs=2, arg_vector=0x82a960)
      at eval.c:2897
  #7  0x010155d0 in apply_lambda (fun=60184862, args=60178750) at eval.c:2781
  #8  0x01013748 in eval_sub (form=60178758) at eval.c:2112
  #9  0x0101308e in eval_sub (form=60181702) at eval.c:2022
  #10 0x0100f188 in Fprogn (args=60178630) at eval.c:359
  #11 0x010103ce in Flet (args=60181710) at eval.c:818
  #12 0x01012d17 in eval_sub (form=60181886) at eval.c:1985
  #13 0x0100f188 in Fprogn (args=60178622) at eval.c:359
  #14 0x01010474 in Fwhile (args=60181902) at eval.c:840
  #15 0x01012d17 in eval_sub (form=60181950) at eval.c:1985
  #16 0x0100f188 in Fprogn (args=60178022) at eval.c:359
  #17 0x01015c8c in funcall_lambda (fun=60177702, nargs=2, arg_vector=0x82b23c)
      at eval.c:2897
  #18 0x0101536c in Ffuncall (nargs=3, args=0x82b238) at eval.c:2733
  #19 0x010140cd in funcall_nil (nargs=3, args=0x82b238) at eval.c:2218
  #20 0x01014536 in run_hook_with_args (nargs=3, args=0x82b238,
      funcall=0x10140b5 <funcall_nil>) at eval.c:2403
  #21 0x01014145 in Frun_hook_with_args (nargs=3, args=0x82b238) at eval.c:2264
  #22 0x01014bfd in Ffuncall (nargs=4, args=0x82b234) at eval.c:2653
  #23 0x0112765f in exec_byte_code (bytestr=20387929, vector=20946773,
      maxdepth=16, args_template=56403994, nargs=0, args=0x0) at bytecode.c:898
  #24 0x01126ad2 in Fbyte_code (bytestr=20387929, vector=20946773, maxdepth=16)
      at bytecode.c:473
  #25 0x01013283 in eval_sub (form=20946726) at eval.c:2043
  #26 0x01010caf in internal_lisp_condition_case (var=58254626,
      bodyform=20946726, handlers=20946798) at eval.c:1147
  #27 0x011280de in exec_byte_code (bytestr=20946369, vector=20946525,
      maxdepth=32, args_template=56403994, nargs=0, args=0x0) at bytecode.c:1094
  #28 0x01015dc0 in funcall_lambda (fun=20946349, nargs=2, arg_vector=0x82b818)
      at eval.c:2904
  #29 0x01015298 in Ffuncall (nargs=3, args=0x82b814) at eval.c:2721
  #30 0x0112765f in exec_byte_code (bytestr=20945985, vector=20946101,
      maxdepth=40, args_template=56403994, nargs=0, args=0x0) at bytecode.c:898
  #31 0x01015dc0 in funcall_lambda (fun=20945965, nargs=1, arg_vector=0x82bb64)
      at eval.c:2904
  #32 0x01015298 in Ffuncall (nargs=2, args=0x82bb60) at eval.c:2721
  #33 0x01011105 in internal_condition_case_n (bfun=0x1014852 <Ffuncall>,
      nargs=2, args=0x82bb60, handlers=56404018,
      hfun=0x1167501 <safe_eval_handler>) at eval.c:1317
  #34 0x0116761c in safe_call (nargs=2, func=60505498) at xdisp.c:2454
  #35 0x0116765c in safe_call1 (fn=60505498, arg=768) at xdisp.c:2470
  #36 0x0116ae0a in handle_fontified_prop (it=0x82c8b0) at xdisp.c:3690
  #37 0x01169e55 in handle_stop (it=0x82c8b0) at xdisp.c:3254
  #38 0x01179215 in next_element_from_buffer (it=0x82c8b0) at xdisp.c:7958
  #39 0x01174ca6 in get_next_display_element (it=0x82c8b0) at xdisp.c:6623
  #40 0x011a14e9 in display_line (it=0x82c8b0) at xdisp.c:19437
  #41 0x011962f9 in try_window (window=59219973, pos=..., flags=0)
      at xdisp.c:16301
  #42 0x01192f34 in redisplay_window (window=59219973, just_this_one_p=0)
      at xdisp.c:15632
  #43 0x0118c9e7 in redisplay_window_0 (window=59219973) at xdisp.c:13881
  #44 0x01010ec9 in internal_condition_case_1 (
      bfun=0x118c9b2 <redisplay_window_0>, arg=59219973, handlers=56388574,
      hfun=0x118c98e <redisplay_window_error>) at eval.c:1231
  #45 0x0118c97e in redisplay_windows (window=59219973) at xdisp.c:13861
  #46 0x0118af1d in redisplay_internal () at xdisp.c:13453
  #47 0x0118bf45 in redisplay_preserve_echo_area (from_where=2) at xdisp.c:13706
  #48 0x01080a7c in Fredisplay (force=56403994) at dispnew.c:5936
  #49 0x01014e91 in Ffuncall (nargs=1, args=0x82efa4) at eval.c:2672
  #50 0x0112765f in exec_byte_code (bytestr=20208233, vector=20208325,
      maxdepth=20, args_template=56403994, nargs=0, args=0x0) at bytecode.c:898
  #51 0x01015dc0 in funcall_lambda (fun=20208181, nargs=1, arg_vector=0x82f208)
      at eval.c:2904
  #52 0x01015298 in Ffuncall (nargs=2, args=0x82f204) at eval.c:2721
  #53 0x0112765f in exec_byte_code (bytestr=58311649, vector=56710557,
      maxdepth=28, args_template=56403994, nargs=0, args=0x0) at bytecode.c:898
  #54 0x01015dc0 in funcall_lambda (fun=56710669, nargs=2, arg_vector=0x82f3d0)
      at eval.c:2904
  #55 0x010155d0 in apply_lambda (fun=56710669, args=60243686) at eval.c:2781
  #56 0x010135a5 in eval_sub (form=60243694) at eval.c:2082
  #57 0x01012877 in Feval (form=60243694, lexical=56403994) at eval.c:1902
  #58 0x01014efc in Ffuncall (nargs=3, args=0x82f654) at eval.c:2675
  #59 0x0112765f in exec_byte_code (bytestr=20695897, vector=20695989,
      maxdepth=28, args_template=2052, nargs=2, args=0x82f8ac) at bytecode.c:898
  #60 0x0101597d in funcall_lambda (fun=20695869, nargs=2, arg_vector=0x82f8a4)
      at eval.c:2838
  #61 0x01015298 in Ffuncall (nargs=3, args=0x82f8a0) at eval.c:2721
  #62 0x01014089 in Fapply (nargs=2, args=0x82f940) at eval.c:2206
  #63 0x0101460d in apply1 (fn=58199234, arg=60243158) at eval.c:2440
  #64 0x0112489e in Fcall_interactively (function=58199234,
      record_flag=56403994, keys=56425333) at callint.c:377
  #65 0x01014f71 in Ffuncall (nargs=4, args=0x82fb80) at eval.c:2679
  #66 0x010146e2 in call3 (fn=56521306, arg1=58199234, arg2=56403994,
      arg3=56403994) at eval.c:2497
  #67 0x010aef10 in Fcommand_execute (cmd=58199234, record_flag=56403994,
      keys=56403994, special=56403994) at keyboard.c:10251
  #68 0x010954d5 in command_loop_1 () at keyboard.c:1588
  #69 0x01010db9 in internal_condition_case (bfun=0x109477b <command_loop_1>,
      handlers=56454362, hfun=0x1093fbb <cmd_error>) at eval.c:1193
  #70 0x01094407 in command_loop_2 (ignore=56403994) at keyboard.c:1175
  #71 0x010107c1 in internal_catch (tag=56444218,
      func=0x10943e4 <command_loop_2>, arg=56403994) at eval.c:964
  #72 0x010943bf in command_loop () at keyboard.c:1154
  #73 0x0109398c in recursive_edit_1 () at keyboard.c:787
  #74 0x01093cae in Frecursive_edit () at keyboard.c:851
  #75 0x01002872 in main (argc=2, argv=0xa427c8) at emacs.c:1573

  Lisp Backtrace:
  "string-width" (0x82a670)
  "let*" (0x82a890)
  "adaptive-wrap-fill-context-prefix" (0x82a960)
  "put-text-property" (0x82ac00)
  "let" (0x82ae00)
  "while" (0x82afa0)
  "adaptive-wrap-prefix-function" (0x82b23c)
  "run-hook-with-args" (0x82b238)
  "byte-code" (0x82b410)
  "jit-lock-fontify-now" (0x82b818)
  "jit-lock-function" (0x82bb64)
  "redisplay_internal (C function)" (0x166c7f0)
  "redisplay" (0x82efa8)
  "sit-for" (0x82f208)
  "animate-string" (0x82f3d0)
  "eval" (0x82f658)
  "eval-expression" (0x82f8a4)
  "call-interactively" (0x82fb84)
  (gdb)



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 13:52       ` Eli Zaretskii
  2013-01-12 14:07         ` Leo Liu
@ 2013-01-12 14:38         ` Stefan Monnier
  1 sibling, 0 replies; 20+ messages in thread
From: Stefan Monnier @ 2013-01-12 14:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: sdl.web, emacs-devel

> Or provide a debugging mode in safe_eval, so that it would, e.g., save
> a backtrace in some variable, instead of showing just the innermost
> expression that threw an error.

That would help as well, yes (and the two are not mutually exclusive).


        Stefan



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: How to debug Error during redisplay
  2013-01-12 14:31                   ` Eli Zaretskii
@ 2013-01-12 17:17                     ` Stephen Berman
  0 siblings, 0 replies; 20+ messages in thread
From: Stephen Berman @ 2013-01-12 17:17 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Leo Liu, emacs-devel

On Sat, 12 Jan 2013 16:31:58 +0200 Eli Zaretskii <eliz@gnu.org> wrote:

>> From:  Leo Liu <sdl.web@gmail.com>
>> Cc: emacs-devel@gnu.org
>> Date: Sat, 12 Jan 2013 21:58:20 +0800
>> 
>> On 2013-01-12 21:49 +0800, Eli Zaretskii wrote:
>> >  . M-: (animate-string "hello" 0) RET
>> >
>> > And I don't see any error messages in *Messages*.
>> 
>> Your frame needs to be a wide as possible so that the inserted string by
>> animate-string is visible.
>
> Thanks, that was the missing link.  The backtrace is below, I hope
> this will allow to fix adaptive-wrap.
>
> For the record, here's how I got it caught red-handed:
>
>  $ gdb ./emacs
>  (gdb) break wrong_type_argument
>  (gdb) r -Q
>
>   Now do whatever it takes to reproduce the problem, and the
>   breakpoint will break.
>
> Evidently, the bug is here:
>
>   (defun adaptive-wrap-fill-context-prefix (beg en)
>     "Like `fill-context-prefix', but with length adjusted by `adaptive-wrap-extra-indent'."
>     (let* ((fcp (fill-context-prefix beg en))
> 	   (fcp-len (string-width fcp))   <<<<<<<<<<<<<<<<<<<
>
> It looks like this function doesn't expect that fill-context-prefix
> could return nil.  But the ELisp manual says:
>
>      Usually, this function returns the fill prefix, a string.  However,
>      before doing this, the function makes a final check (not specially
>      mentioned in the following) that a line starting with this prefix
>      wouldn't look like the start of a paragraph.  Should this happen,
>      the function signals the anomaly by returning `nil' instead.
>      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The simplest fix seems to be for the fill prefix to default to "", as in
the patch below, which prevents the redisplay error, though I cannot
tell whether the resulting failure to "signal the anomaly" could have
undesirable consequences.

Steve Berman

*** /tmp/ediff4143yqw	2013-01-12 18:02:35.482163188 +0100
--- /tmp/ediff4143_02	2013-01-12 18:02:35.525164198 +0100
***************
*** 1,6 ****
  (defun adaptive-wrap-fill-context-prefix (beg en)
!   "Like `fill-context-prefix', but with length adjusted by `adaptive-wrap-extra-indent'."
!   (let* ((fcp (fill-context-prefix beg en))
           (fcp-len (string-width fcp))
           (fill-char (if (< 0 fcp-len)
                          (string-to-char (substring fcp -1))
--- 1,8 ----
  (defun adaptive-wrap-fill-context-prefix (beg en)
!   "Compute a fill prefix from the text between BEG and EN.
! Like `fill-context-prefix', but with length adjusted by
! `adaptive-wrap-extra-indent'."
!   (let* ((fcp (or (fill-context-prefix beg en) ""))
           (fcp-len (string-width fcp))
           (fill-char (if (< 0 fcp-len)
                          (string-to-char (substring fcp -1))



^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2013-01-12 17:17 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-11  9:03 How to debug Error during redisplay Leo Liu
2013-01-11 10:25 ` Eli Zaretskii
2013-01-11 11:02   ` Leo Liu
2013-01-11 14:08     ` Eli Zaretskii
2013-01-12  5:25       ` Leo Liu
2013-01-12  9:43         ` Eli Zaretskii
2013-01-12 11:56           ` Leo Liu
2013-01-12 12:03             ` Leo Liu
2013-01-12 13:49               ` Eli Zaretskii
2013-01-12 13:58                 ` Leo Liu
2013-01-12 14:31                   ` Eli Zaretskii
2013-01-12 17:17                     ` Stephen Berman
2013-01-12 12:30             ` Eli Zaretskii
2013-01-11 14:56 ` Stefan Monnier
2013-01-12  5:26   ` Leo Liu
2013-01-12 13:08     ` Stefan Monnier
2013-01-12 13:38       ` Leo Liu
2013-01-12 13:52       ` Eli Zaretskii
2013-01-12 14:07         ` Leo Liu
2013-01-12 14:38         ` Stefan Monnier

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