我想我当时可能只需要多挖掘一点就可以回答我自己的问题,但是第一个 gdb 解决方案在旧的学习前沿把它从我身上拿走了。我恢复了,所以..
Ch b Cs 大调
稍微滚动后,我们可以将“comint-send-input”识别为绑定到“enter”键的函数。查看此函数的源代码,comint.el:1765 是对“run-hook-with-args”的调用。这就是我们意识到没有地方专门为“pdb”做我们想做的事情的地方。
gud 是一个通用包装器,用于调用外部调试过程并返回结果..因此控制在 elisp 中不存在。gdb 也是如此,但在外部调用周围有一个很好的(预先存在的)包装器,这使得建议该函数感觉“干净”。
所以黑客..就在'comint-send-input'之上是'comint-add-to-input-history'..很容易。
;;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)))
)
仅供参考,我有这些来启动调试会话的输入环
;#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))))
..如果调试缓冲区被杀死,则写入历史文件
(add-hook 'kill-buffer-hook 'comint-write-input-ring)
干杯。