emacs python pdb重启调试sesson

时间:2014-04-14 12:57:50

标签: python debugging emacs pdb

我正在使用Emacs来编辑和调试python代码,我想知道如何使用单个字母命令在emacs pdb中重启我的调试会话。在perldb中,有一个命令R等同于restart脚本,但我找不到python中restart的等效单字母指令。 / p>

有没有办法在pdb中挂钩R来做restart

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式将pdb-restart(可能不存在)等函数绑定到“R”:

(define-key gud-mode-map "R" 'pdb-restart)

虽然这会影响所有gud会话。如果在其他gud会话中不需要,您可以始终设置特定挂钩来覆盖此行为。

编辑:

更好的方法是使用pdb-mode-hook而不是修改gud-mode-map

(add-hook 'pdb-mode-hook '(define-key (current-local-map) "R" 'pdb-restart))

我自己尝试重新启动pdb会话,最后必须编写自己的命令来执行此操作。它首先尝试使用comint-send-input发送一个很好的'restart',但如果这不起作用,它会回退到杀死缓冲区(以及底层的pdb进程),并重新启动pdb会话,使用相同的目录和参数作为最后一次启动的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"))