如何告诉 emacs gdb 在缓冲区的中心显示当前代码行?

如何告诉 emacs gdb 在缓冲区的中心显示当前代码行?

使用 emacs 中的调试器很不错:您可以使用命令逐步执行代码next,emacs 将始终显示当前执行的代码行,如下所示:

  int x;
  int y;
=>int z;

但不幸的是,如果您的文件很长,该指针=>最终将移动到底部并始终在缓冲区的底部显示当前行。

如果指针始终停留在缓冲区的中间(垂直居中)会更好=>,这样我就可以再次看到当前行之后的内容,next就像这里一样:

  int y;
=>int z;
  std::cout << z;

可以吗?我可以把它设置在某处吗?

答案1

没有内置机制来保持线条居中,但是这个建议对我来说很有帮助:

(defadvice gud-display-line (after gud-display-line-centered activate)
  "Center the line in the window"
  (when (and gud-overlay-arrow-position gdb-source-window)
    (with-selected-window gdb-source-window
      ; (marker-buffer gud-overlay-arrow-position)
      (save-restriction
        (goto-line (ad-get-arg 1))
        (recenter)))))

答案2

正如@MMM提到的,gdb-source-window在较新的emacs中是无效的。从这里的代码中得到启发:http://kousik.blogspot.com/2005/10/highlight-current-line-in-gdbemacs.html,我可以使用以下代码使其工作(注意:它既可以用于重新居中也可以用于突出显示当前行):

(defvar gud-overlay
  (let* ((ov (make-overlay (point-min) (point-min))))
    (overlay-put ov 'face '(:background "#F6FECD")) ;; colors for Leuven theme
    ov)
  "Overlay variable for GUD highlighting.")
(defadvice gud-display-line (after my-gud-highlight act)
 "Highlight current line."
 (let* ((ov gud-overlay)
        (bf (gud-find-file true-file)))
   (save-excursion
     (with-selected-window (get-buffer-window bf)
       (save-restriction
         (goto-line (ad-get-arg 1))
         (recenter)))
     (set-buffer bf)
     (move-overlay ov (line-beginning-position) (line-end-position)
                   (current-buffer)))))

相关内容