elisp – ¿Cómo hacer que Emacs localice el error en mi archivo de inicio sin reiniciarlo?

Pregunta:

Cuando hay un error en uno de mis archivos de inicio, aparece un mensaje vago como este cuando lanzo Emacs:

Warning (initialization): An error occurred while loading /Users/im/.emacs.d/init.elc:
(wrong-type-argument listp helm-find-files-actions)

No me dice cuál de mis muchos archivos de configuración contiene el error o qué línea. Buscar mis archivos no ayuda porque, adivinen qué, la función helm-find-files-actions realidad no aparece en ninguno de mis archivos de inicio. Para rastrear la línea de código ofensiva, tengo que hacer $ emacs --debug-init .

¿No hay forma de que Emacs me diga automáticamente dónde está la línea ofensiva sin tener que salir y ejecutar $ emacs --debug-init ? Sé que puedo bisecar + evaluar los archivos manualmente, pero eso es aún más lento. Sería mucho mejor si, cuando hay un error en uno de mis archivos de inicio, Emacs pudiera:

  1. dime cual archivo de inicio
  2. dime el número de línea que contiene el error
  3. idealmente, abra ese archivo init y lléveme a la línea ofensiva

¿Es esto posible con Emacs o estoy viviendo en un mundo de fantasía?

Respuesta:

Sé que puedo bisecar + evaluar los archivos manualmente, pero eso es aún más lento.

¡Incorrecto! Así que ignoraré la parte " sin relanzar " del título de su pregunta.

Esto es común y clásico, al igual que la solución: búsqueda binaria . Si activar debug-on-error y usar la opción --debug-init no ayuda, haga esto:

Divida en dos su archivo init de forma recursiva, para localizar la pequeña parte que es responsable del problema.

Eso es todo. La búsqueda binaria es muy rápida, potente y sencilla. Las personas lo evitan con demasiada frecuencia, pensando que pueden resolver el problema más rápido.

Para dividir en dos su archivo de inicio de forma recursiva:

  1. Comenta la mitad. Puede usar Mx comment-region para comentar la región del texto seleccionado. (Puede descomentar la región usando Cu con el mismo comando. (Para mayor comodidad, puede vincular comment-region a una clave).

  2. Inicie Emacs. ¿Viste el mismo problema? Si es así, entonces el problema no es causado por la parte que comentó. Si no, entonces lo es.

  3. Para la parte problemática: Comente la otra parte y la mitad de la parte problemática.

Repita el n. ° 2 y el n. ° 3, una y otra vez. No tarda mucho: 1/2, 3/4, 7/8, 15/16, 31/32, 63/64, 127/128, 255/256, 511/512, 1023/1024, …

No importa qué tan grande sea su archivo de inicio o cuánto otro código cargue (si el problema está en otro código, repita el mismo proceso en ese archivo, etc.).

De hecho, cuanto mayor sea la pila de código que está tratando de buscar, más búsqueda binaria le ayudará.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım