题
我正在使用 emacs 24.3.1 编写程序(在 C 和 C++ 模式下)。
编译当前缓冲区后,我运行以下命令:M-x gud-gdb。Emacs 给出如下提示:gdb --全名程序
但是,有时“prog”名称与从当前缓冲区编译的可执行文件名称不同。例如我完成了五个程序 prog1, prog2,...prog5,目前正在开发 prog6。但是 M-x gud-gdb 给了我 gdb --fullname prog5。(我想要 prog6。)
有办法纠正这个问题吗?具体来说,“正确”意味着强制 gud-gdb 使用当前缓冲区的名称(不带后缀)作为 prog 名称。
提前致谢。
解决方案
我认为Emacs使用启发式(基于什么可执行文件是更新的或类似的东西)来弄清楚要提供的默认程序。
如果您的偏好非常具体,您可以定义和使用此功能:
(defun my-gud-gdb ()
(interactive)
(gud-gdb (concat "gdb --fullname "
(file-name-sans-extension (buffer-file-name (current-buffer))))))
.
此函数将在命名的文件上执行gdb,例如未扩展的未经扩展名称的文件。
其他提示
gud-query-cmdline
接受 filename
作为可选参数,尚未提供。
下面的补丁应该提供它。
确保文件权限设置为可执行
--- gud.el Sun Mar 17 12:52:42 2013
+++ gud.el Tue Jun 3 10:06:11 2014
@@ -716,7 +716,7 @@
"Run gdb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working
directory and source-file directory for your debugger."
- (interactive (list (gud-query-cmdline 'gud-gdb)))
+ (interactive (list (gud-query-cmdline 'gud-gdb (and (file-executable-p (buffer-file-name))(buffer-file-name)))))
(when (and gud-comint-buffer
(buffer-name gud-comint-buffer)
不隶属于 StackOverflow