2011-06-06 14 views
8

he comenzado a usar pdb a través de gud en emacs 23.3, ¿cómo puedo conectar los mensajes de comando enviados al depurador desde el buffer? Escribí los siguientes consejos para usar con gdb, para poder mantener el anillo de comint, pero no puedo encontrar una función equivalente para enganchar para pdb. Estoy usando python-mode.el como mi modo principal.¿cómo conecto los comandos enviados a pdb a través de gud?

gracias.

(defadvice gdb-send-item (before gdb-save-history first nil activate) 
    "write input ring on quit" 
    (if (equal (type-of item) 'string) ; avoid problems with 'unprintable' structures sent to this function.. 
    (if (string-match "^q\\(u\\|ui\\|uit\\)?$" item) 
     (progn (comint-write-input-ring) 
      (message "history file '%s' written" comint-input-ring-file-name))))) 
+0

nota: 'GDB-send-item' fue retirado de emacs en algún lugar entre entonces (23.3) y ahora (24,3), sino simplemente la fusión de la anterior cadena de coincidencia en el asesoramiento en la respuesta a continuación tengo mis emacs GUD/GDB y el historial externo de gdb se sincronizó de nuevo – elbeardmorez

Respuesta

1

Creo que probablemente podría haber respondido a mi propia pregunta en el momento con sólo un poco más de excavación, pero la primera solución en lugar de GDB lo sacó de mí en el viejo delante de aprendizaje. No recuperé, por lo ..

C-H B C-Major s

después de un poco de desplazamiento podemos identificar 'comint-send-entrada' como la función con destino a la tecla 'enter'. mirando la fuente de esta función, comint.el: 1765 es una llamada a 'run-hook-with-args' ... aquí es donde nos damos cuenta de que no hay ningún lugar específicamente 'pdb' para hacer lo que queremos.

GUD es un contenedor genérico para llamar a los procesos de depuración externos y devolver el control de los resultados ..hence no está allí en elisp. era lo mismo con gdb, pero había un envoltorio agradable (preexistente) alrededor de la llamada externa que hacía que el asesoramiento de esa función pareciera "limpio".

por lo que el corte justo por encima .. 'comint-send-input' se encuentra 'comint-add-a-entrada-historia' .. fácil de muertos.

;;save command history 
(defadvice comint-add-to-input-history (before pdb-save-history activate compile) 
    "write input ring on exit" 
    (message "%s" cmd) 
    (if (string-match "^e\\(x\\|xi\\|xit\\)?$" cmd) 
    (progn (comint-write-input-ring) 
    (message "history file '%s' written" comint-input-ring-file-name))) 
) 

FYI, tengo estos para iniciar el anillo de entrada para las sesiones de depuración

;#debugger history 
(defun debug-history-ring (file) 
    (comint-read-input-ring t) 
    (setq comint-input-ring-file-name file) 
    (setq comint-input-ring-size 1000) 
    (setq comint-input-ignoredups t)) 
(let ((hooks '((gdb-mode-hook . (lambda() (debug-history-ring "~/.gdbhist"))) 
     (pdb-mode-hook . (lambda() (debug-history-ring "~/.pythonhist")))))) 
    (dolist (hook hooks) (print (cdr hook)) (add-hook (car hook) (cdr hook)))) 

..y escribir en el archivo de la historia si el búfer de depuración se mató

(add-hook 'kill-buffer-hook 'comint-write-input-ring) 

aclamaciones.

Cuestiones relacionadas