Cómo depurar errores en centinelas y durante el bloqueo de fuente


10

Cuando se produce un error dentro de un centinela de proceso o durante el bloqueo de fuente, Emacs no muestra una traza inversa a pesar de que debug-on-errorestaba habilitado previamente.

Entiendo por qué se detectan estos errores, el mismo error podría activarse nuevamente al intentar presentar la traza inversa. Sin embargo, cuando realmente quiero depurar ese error, no es muy útil. Prefiero arriesgarme a que Emacs deje de responder que tener que trabajar desde esto:

error in process sentinel: Wrong type argument: stringp, nil

Después de todo, puedo comenzar una segunda instancia, si la primera comienza a volverse loca. Un poco más de contexto ayudaría cuando hay muchos lugares donde dicho error podría ocurrir teóricamente en un centinela.

Entonces, ¿cómo puedo obligar a Emacs a mostrar un retroceso incluso en los casos en que debug-on-errorno tiene ningún efecto?


1
He visto emacs.stackexchange.com/questions/3552/… pero creo que debería haber una pregunta sobre esto en general, no solo un caso en particular. Además, realmente espero que "use printf" no sea la única respuesta, porque eso es lo que he usado en el pasado, y no es satisfactorio, especialmente si el error es "Referencia de cara no válida: alguna cara que conozco absolutamente -existe ", que podría ser activado por casi todos los paquetes que he instalado.
tarsius

La URL señala esta pregunta y, por lo tanto, es bastante confusa en su comentario, ¿es intencional o un error en su nombre?
wasamasa

Ese es el problema que quise decir: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius

el enlace tarsius pretendía: emacs.stackexchange.com/questions/1045/… ‌ ug-init-has-no-effect
dcorking

Respuestas:


10

Para los centinelas de proceso, no creo que haya una buena razón. IOW Creo que es solo una característica que falta, así que te sugiero M-x report-emacs-bug.

Para el bloqueo de fuente, el problema es más complicado porque lo que realmente sucede es que el error se desencadena durante el bloqueo de jit, es decir, durante la visualización, y no podemos ingresar fácilmente al depurador en ese momento (IIRC en algún momento Gerd trató de hacer funciona, pero hubo algunos problemas serios, aún). Por lo tanto, puede depurarlo de una de las siguientes maneras:

  • M-x jit-lock-debug-mode que cambia jit-lock para que se ejecute justo después de volver a mostrar, para que podamos ingresar al depurador.
  • M-: (setq font-lock-support-mode nil) RETy luego deshabilitar + volver a habilitar el bloqueo de fuente. De esta forma, font-lock ya no usa jit-lock, por lo que se ejecuta durante el comando del usuario en lugar de durante la posterior visualización.

En realidad, debug-on-errorparece funcionar bien en los centinelas de proceso.
Stefan

@tarsius - publique un enlace a su problema de
debbugs

La solicitud de función de tarsius es 19432, donde se etiqueta como no reproducible. Stefan Monnier publicó una solución alternativa allí que usa en --evallugar de --debug-init . Además, su solución alternativa no me ayuda a caer en un retroceso en mi actual.emacs.d
dcorking

1
@dcorking: no, en el error # 19432, no publiqué una "solución" sino un intento fallido de reproducir su error. ¿Por qué no envías una receta para reproducir tu problema?
Stefan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.