Function: gdb-frame-handler

gdb-frame-handler is a byte-compiled function defined in gdb-mi.el.gz.

Signature

(gdb-frame-handler)

Documentation

Set gdb-selected-frame and gdb-selected-file to show overlay arrow in source buffer.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/gdb-mi.el.gz
(defun gdb-frame-handler ()
  "Set `gdb-selected-frame' and `gdb-selected-file' to show
overlay arrow in source buffer."
  (let ((frame (gdb-mi--field (gdb-mi--partial-output) 'frame)))
    (when frame
      (setq gdb-selected-frame (gdb-mi--field frame 'func))
      (setq gdb-selected-file
            (when-let* ((full (gdb-mi--field frame 'fullname)))
              (file-local-name full)))
      (setq gdb-frame-number (gdb-mi--field frame 'level))
      (setq gdb-frame-address (gdb-mi--field frame 'addr))
      (let ((line (gdb-mi--field frame 'line)))
        (setq gdb-selected-line (and line (string-to-number line)))
        (when (and gdb-selected-file gdb-selected-line)
          (setq gud-last-frame (cons gdb-selected-file gdb-selected-line))
          (gud-display-frame)))
      (if gud-overlay-arrow-position
          (let ((buffer (marker-buffer gud-overlay-arrow-position))
                (position (marker-position gud-overlay-arrow-position)))
            (when buffer
              (with-current-buffer buffer
                (setq fringe-indicator-alist
                      (if (string-equal gdb-frame-number "0")
                          nil
                        '((overlay-arrow . hollow-right-triangle))))
                (setq gud-overlay-arrow-position (make-marker))
                (set-marker gud-overlay-arrow-position position))))))))