我有一个我想用python-mode调试的python脚本。我在this thread中读到我可以使用M-x pdb
调试我的python脚本,但是我收到以下错误:
搜索程序:没有这样的文件或目录,pdb
我可以在迷你缓冲区的提示符中提供python -m pdb my_source_file.py
,但如果Emacs可以直接从我运行的文件M-x pdb
当我运行M-: exec-path
时,当我运行M-: (getenv "PATH")
时,我会得到不同的路径(M-: (getenv "PATH")
返回的路径更长)。
有了这个:
pdb
位于何处?如何将其添加到Emacs路径? PATH
所持有的路径?答案 0 :(得分:9)
继我之前的评论以及您对该问题的后续更新:
首先找出适用于您的终端的$PATH
值。使用which pdb
查找pdb
可执行文件所在的位置。
然后,在Emacs中显式设置$PATH
环境变量,并将其同步到exec-path
,如下所示:
(setenv "PATH" "/usr/local/bin:/usr/bin:/bin:/some/other/dir")
(setq exec-path (split-string (getenv "PATH") path-separator))
您可能还需要明确设置PYTHONPATH
或类似的环境变量;您可以使用上面的“setenv”行等行,或者只使用exec-path-from-shell elisp package。
更新
好的,事实证明,pdb
并未提供Emacs的python-mode
命令,它希望找到一个名为“pdb”的可执行文件。解决这个问题的简单方法是在$ PATH的目录中创建一个名为“pdb”的shell包装器:
#!/bin/sh
exec python -m pdb "$@"
(我发现了一条注释here暗示了这种技术。)
Windows下的等效文件名为pdb.bat,包含:
python -u -m pdb %1
(-u
阻止Python缓冲其输出。)
答案 1 :(得分:6)
要运行Python调试器,M-x pdb
期望找到名为pdb
的可执行文件。虽然pdb
可执行文件可能存在于某些Python发行版中,但它并不存在于所有Python发行版中。
要解决此问题的建议位于GNU bug report #21521: pdb default suggested command。
在修复错误之前,您可以设置变量gud-pdb-command-name
以定义用于启动pdb的命令。在.emacs中,添加...
(setq gud-pdb-command-name "python -m pdb")
答案 2 :(得分:3)
在shell提示符下输入
which pdb
在Emacs中,输入M-x customize
。选择编程>工具> GUD。将gud-pdb-command-name
的值设置为which pdb
返回的路径。
如果您的Emacs版本为自定义菜单提供了不同的组织,您也可以尝试
C-h v gud-pdb-command-name
然后点击customize
链接,并将路径设置为pdb
。
虽然上述说明有所不同,但我通过阅读"Running pdb under emacs"找到了这一点。
答案 3 :(得分:2)
您可以创建如下自定义命令:
;; PDB command line
(defun user-python-debug-buffer ()
"Run python debugger on current buffer."
(interactive)
(setq command (format "python -u -m pdb %s " (file-name-nondirectory buffer-file-name)))
(let ((command-with-args (read-string "Debug command: " command nil nil nil)))
(pdb command-with-args)))
答案 4 :(得分:0)
在Emacs 23.3.1中可能更高,另一种变体是使用Emacs shell Eshell(M-x eshell
)。在Eshell下,有一个预先存在的,基于Lisp的pdb定义。这些Lisp函数在Eshell中工作,就像普通的shell命令一样。
因此,pdb "./manage.py runserver"
将启动Django服务器。
答案 5 :(得分:0)
每个人都在疯狂地说您必须制作一个pdb
文件并使其成为可执行文件,然后键入./pdb your_code.py
。比这容易得多。
位于要从其运行调试器的位置。可能在您的python文件中,可以使用M-x cd
到达某个地方。
然后输入:M-x pdb
它将提示您:
Run pdb (like this):
您想要使它看起来像这样:
Run pdb (like this): python -m pdb your_code.py
有时候我想将我的代码作为模块运行。
Run pdb (like this): python -m pdb -m some_package.my_code
然后输入help
并阅读此https://docs.python.org/3/library/pdb.html
答案 6 :(得分:0)
我的答案基于@Chad Nouis提到的内容。 a link
但是,我已将其添加到python-mode中,每次加载python-mode时,它将gud-pdb-command-name
设置为"python -m pdb"
;; Set the PDB command
(add-hook 'python-mode-hook
(lambda () (setq gud-pdb-command-name "python -m pdb")))