我开始在Emacs中使用pdb
Python调试器,我已经习惯了perl调试器中的键,我希望它也可以在pdb
中使用。如何在Emacs中配置调试器以具有与Perl中相同的键绑定,例如“restart = R”或“print = x”?
我不介意这是否仅适用于Emacs中的调试而不是控制台中的pdb调试器,我将在Emacs中进行所有调试。
答案 0 :(得分:1)
这是我用来强制执行pdb重启的代码,它首先通过comint-send-input发送重启,但是回退到使用相同的参数杀死并重新启动pdb进程,如果失败则返回默认目录。
(defun pdb-restart ()
(interactive)
(comint-insert-send "restart")
(sleep-for .5)
(when
(or
(last-lines-match "raise Restart.*
Restart")
(last-lines-match "restart")
(not (get-buffer-process (current-buffer))))
(let ((kill-buffer-query-functions nil );disable confirming for process kill
(pdbcmd (car-safe (symbol-value (gud-symbol 'history nil 'pdb))))
(default-directory default-directory))
(kill-this-buffer)
(cd default-directory)
(pdb pdbcmd)))
(comint-insert-send "n"))
(defun comint-insert-send (input)
(insert input)
(comint-send-input))
(defun last-lines-match (regexp &optional n)
(unless n (setf n 3))
(re-search-backward regexp (line-beginning-position (- 0 n)) t))
您可以将pdb-restart绑定到' R'通过类似的东西:
(add-hook 'pdb-mode-hook '(define-key (current-local-map) "R" 'pdb-restart))
至于打印,在pdb中,您可以简单地执行p pythonexpression
,因此没有太多的快捷方式。但是,您可以将x绑定到' print'使用以下内容:
(define-key gud-mode-map "x" (lambda () (interactive) (insert "print ")))