1

我正在使用 emacs 24.3.1 编写程序(在 C 和 C++ 模式下)。

编译当前缓冲区后,我运行以下命令:Mx gud-gdb。Emacs 给出如下提示: gdb --fullname prog

但是,有时“prog”名称与从当前缓冲区编译的可执行文件名称不同。例如,我完成了五个程序 prog1、prog2、... prog5,目前正在研究 prog6。但是 Mx gud-gdb 给了我 gdb --fullname prog5。(我想要 prog6 代替。)

有没有办法纠正这个问题?具体来说,“正确”意味着强制 gud-gdb 使用当前缓冲区的名称(不带后缀)作为 prog 名称。

提前致谢。

4

2 回答 2

2

我认为 emacs 使用启发式(基于什么可执行文件是更新的或类似的东西)来找出要提供的默认程序。

如果您的偏好非常具体,您可以定义和使用此功能:

(defun my-gud-gdb ()
 (interactive)
 (gud-gdb (concat "gdb --fullname "
                  (file-name-sans-extension (buffer-file-name (current-buffer))))))

这个函数将对一个文件执行 gdb,该文件的名称与您正在编辑的文件类似,但没有扩展名。

于 2014-06-03T07:18:49.377 回答
0

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)
于 2014-06-03T10:17:40.047 回答