Function: gud-dguxdbx-marker-filter
gud-dguxdbx-marker-filter is a byte-compiled function defined in
gud.el.gz.
Signature
(gud-dguxdbx-marker-filter STRING)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/gud.el.gz
;; There are a couple of differences between DG's dbx output and normal
;; dbx output which make it nontrivial to integrate this into the
;; standard dbx-marker-filter (mainly, there are a different number of
;; backreferences). The markers look like:
;;
;; (0) Stopped at line 10, routine main(argc=1, argv=0xeffff0e0), file t.c
;;
;; from breakpoints (the `(0)' there isn't constant, it's the breakpoint
;; number), and
;;
;; Stopped at line 13, routine main(argc=1, argv=0xeffff0e0), file t.c
;;
;; from signals and
;;
;; Frame 21, line 974, routine command_loop(), file keyboard.c
;;
;; from up/down/where.
(defun gud-dguxdbx-marker-filter (string)
(setq gud-marker-acc (if gud-marker-acc
(concat gud-marker-acc string)
string))
(let ((re (concat "^\\(\\(([0-9]+) \\)?Stopped at\\|Frame [0-9]+,\\)"
" line \\([0-9]+\\), routine .*, file \\([^ \t\n]+\\)"))
start)
;; Process all complete markers in this chunk.
(while (string-match re gud-marker-acc start)
(setq gud-last-frame
(cons (match-string 4 gud-marker-acc)
(string-to-number (match-string 3 gud-marker-acc)))
start (match-end 0)))
;; Search for the last incomplete line in this chunk
(while (string-match "\n" gud-marker-acc start)
(setq start (match-end 0)))
;; If the incomplete line APPEARS to begin with another marker, keep it
;; in the accumulator. Otherwise, clear the accumulator to avoid an
;; unnecessary concat during the next call.
(setq gud-marker-acc
(if (string-match "Stopped\\|Frame" gud-marker-acc start)
(substring gud-marker-acc (match-beginning 0))
nil)))
string)