使用Emacs来写Python,但调试环境一直不顺。开始是用Emacs自带的gud,支持M-x pdb
命令直接来调用Python中pdb来调试(python -m pdb <python_buffer_name>
),realgud则是M-x realgud:pdb
,但遇到以下问题,寻求道友支持。
1、没有图形界面。gud的pdb操作和在终端操作基本一样,除了多几个菜单项,但是我看到许多帖子,M-x gdb
是有图形界面的,比如Emacs 调试秘籍之 GUD 调试器 | Linux 中国 - 知乎,顶上有一排图标方便鼠标操作;M-x realgud:pdb
也是有的,比如wikemacs#Realgud。但是我在使用中并没有图形界面,不知是否配置原因,我对gud和realgud都没有做任何配置。
2、跨buffer操作问题。gud或者realgud启动后,是自动开启一个debug buffer(* gud-pdb *或者类似名字),realgub还能拆分窗口上下联动,焦点保持在debug buffer中,看Emacs 调试秘籍之 GUD 调试器 | Linux 中国 - 知乎里截图也是上下联动的,但是我在使用中并没有;打断点如果是切换到python文件buffer瞄一眼代码,gud或realgud模式就没有了,再回来debug buffer敲命令打断点,来回切buffer真是蹩脚(用list不如直接看整个代码文件直观)。
3、GUI程序不能启动。我有一个PySide程序,使用gud的pdb不能显示程序窗口。
环境:Windows 10 + 原生GNU Emacs 28.2。
1 个赞
写完之后觉得不甘心,加上今晚的任务又没有那么紧迫了,于是研究了一下,初步发现了问题所在:
安装了pdbpp之后,用M-x pdb
拉起调试,但是用s, n
等命令的时候不会代码跟随,我拿python-pdbtrack-comint-output-filter-function
里面的这段代码(略有改动)来跑(用ESC :
发起)
(when (re-search-backward python-pdbtrack-stacktrace-info-regexp nil t)
(cons (string-to-number (match-string-no-properties 2)) (match-string-no-properties 1)))
发现它是能正确解析到文件名和行号的。
然后又看了一下*gud-pdb* buffer
的comint-output-filter-functions
,发现它的值里面没有python-pdbtrack-comint-output-filter-function
,于是自己执行了一下ESC : (add-hook 'comint-output-filter-functions 'python-pdbtrack-comint-output-filter-function)
之后代码跟随又可以了
silaoA
4
有没有图标确实是次要的,关键是F9、F10、F11这些键也没能把调试跑起来。
项目文档太简略了,不知道怎么操作。
silaoA
5
而且,我有个带图形界面的程序(pyside程序),在终端里敲调试命令可以跑起来,在emacs gud/realgud里就是不能显示图形界面。
图标问题,确实是开启tool-bar-mode就有了。我还想,在退出调试,比如M-x debugger-quit
命令时加hook或者advice,用来关闭tool-bar-mode、kill掉调试的buffer,该怎么写配置?
另一个更大的问题是图形界面程序,显示不出来。