Emacs中的Python调试器:设置类似于perldb的键绑定?

时间:2013-11-19 10:38:58

标签: python perl debugging emacs

我开始在Emacs中使用pdb Python调试器,我已经习惯了perl调试器中的键,我希望它也可以在pdb中使用。如何在Emacs中配置调试器以具有与Perl中相同的键绑定,例如“restart = R”或“print = x”?

我不介意这是否仅适用于Emacs中的调试而不是控制台中的pdb调试器,我将在Emacs中进行所有调试。

1 个答案:

答案 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 ")))