Function: gud-irixdbx-marker-filter
gud-irixdbx-marker-filter is a byte-compiled function defined in
gud.el.gz.
Signature
(gud-irixdbx-marker-filter STRING)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/gud.el.gz
;; The process filter is also somewhat
;; unreliable, sometimes not spotting the markers; I don't know
;; whether there's anything that can be done about that.]
;; this filter is influenced by the xdb one rather than the gdb one
(defun gud-irixdbx-marker-filter (string)
(let (result (case-fold-search nil))
(if (or (string-match comint-prompt-regexp string)
(string-match ".*\012" string))
(setq result (concat gud-marker-acc string)
gud-marker-acc "")
(setq gud-marker-acc (concat gud-marker-acc string)))
(if result
(cond
;; look for breakpoint or signal indication e.g.:
;; [2] Process 1267 (pplot) stopped at [params:338 ,0x400ec0]
;; Process 1281 (pplot) stopped at [params:339 ,0x400ec8]
;; Process 1270 (pplot) Floating point exception [._read._read:16 ,0x452188]
((string-match
"^\\(\\[[0-9]+] \\)?Process +[0-9]+ ([^)]*) [^[]+\\[[^]\n]*]\n"
result)
;; prod dbx into printing out the line number and file
;; name in a form we can grok as below
(process-send-string (get-buffer-process gud-comint-buffer)
"printf \"\032\032%1d:\",(int)$curline;file\n"))
;; look for result of, say, "up" e.g.:
;; .pplot.pplot(0x800) ["src/pplot.f":261, 0x400c7c]
;; (this will also catch one of the lines printed by "where")
((string-match
"^[^ ][^[]*\\[\"\\([^\"]+\\)\":\\([0-9]+\\), [^]]+]\n"
result)
(let ((file (match-string 1 result)))
(if (file-exists-p file)
(setq gud-last-frame
(cons (match-string 1 result)
(string-to-number (match-string 2 result))))))
result)
((string-match ; kluged-up marker as above
"\032\032\\([0-9]*\\):\\(.*\\)\n" result)
(let ((file (gud-file-name (match-string 2 result))))
(if (and file (file-exists-p file))
(setq gud-last-frame
(cons file
(string-to-number (match-string 1 result))))))
(setq result (substring result 0 (match-beginning 0))))))
(or result "")))