From: Richard M. Stallman Date: Tue, 24 Oct 1995 17:55:30 +0000 (+0000) Subject: (gud-dbx-directories): New variable. X-Git-Tag: emacs-19.34~2572 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3b3703faebe46669e6f06cfc6acf68e898525fde;p=emacs.git (gud-dbx-directories): New variable. (gud-dbx-massage-args): Use gud-dbx-directories. (gud-dbx-file-name): New function. (gud-irixdbx-marker-filter): Use gud-dbx-file-name. (gud-dbx-file-file): Use gud-dbx-file-name. (gud-filter): Fix previous change. --- diff --git a/lisp/gud.el b/lisp/gud.el index 17ff347949c..d475e9be362 100644 --- a/lisp/gud.el +++ b/lisp/gud.el @@ -33,7 +33,8 @@ ;; added support for xdb (HPUX debugger). Rick Sladkey ;; wrote the GDB command completion code. Dave Love ;; added the IRIX kluge, re-implemented the Mips-ish variant and added -;; a menu. +;; a menu. Brian D. Carlstrom combined the IRIX kluge with +;; the gud-xdb-directories hack producing gud-dbx-directories. ;;; Code: @@ -511,7 +512,36 @@ and source-file directory for your debugger." ;;; History of argument lists passed to dbx. (defvar gud-dbx-history nil) -(defun gud-dbx-massage-args (file args) args) +(defvar gud-dbx-directories nil + "*A list of directories that dbx should search for source code. +If nil, only source files in the program directory +will be known to dbx. + +The file names should be absolute, or relative to the directory +containing the executable being debugged.") + +(defun gud-dbx-massage-args (file args) + (nconc (let ((directories gud-dbx-directories) + (result nil)) + (while directories + (setq result (cons (car directories) (cons "-I" result))) + (setq directories (cdr directories))) + (nreverse result)) + args)) + +(defun gud-dbx-file-name (f) + "Transform a relative file name to an absolute file name, for dbx." + (let ((result nil)) + (if (file-exists-p f) + (setq result (expand-file-name f)) + (let ((directories gud-dbx-directories)) + (while directories + (let ((path (concat (car directories) "/" f))) + (if (file-exists-p path) + (setq result (expand-file-name path) + directories nil))) + (setq directories (cdr directories))))) + result)) (defun gud-dbx-marker-filter (string) (setq gud-marker-acc (if gud-marker-acc (concat gud-marker-acc string) string)) @@ -680,8 +710,9 @@ This works in IRIX 4, 5 and 6.") result) ((string-match ; kluged-up marker as above "\032\032\\([0-9]*\\):\\(.*\\)\n" result) - (let ((file (substring result (match-beginning 2) (match-end 2)))) - (if (file-exists-p file) + (let ((file (gud-dbx-file-name + (substring result (match-beginning 2) (match-end 2))))) + (if (and file (file-exists-p file)) (setq gud-last-frame (cons file @@ -693,12 +724,15 @@ This works in IRIX 4, 5 and 6.") (defun gud-dbx-find-file (f) (save-excursion - (let ((buf (find-file-noselect f))) - (set-buffer buf) - (gud-make-debug-menu) - (local-set-key [menu-bar debug up] '("Up Stack" . gud-up)) - (local-set-key [menu-bar debug down] '("Down Stack" . gud-down)) - buf))) + (let ((realf (gud-dbx-file-name f))) + (if realf + (let ((buf (find-file-noselect f))) + (set-buffer buf) + (gud-make-debug-menu) + (local-set-key [menu-bar debug up] '("Up Stack" . gud-up)) + (local-set-key [menu-bar debug down] '("Down Stack" . gud-down)) + buf) + nil)))) ;;;###autoload (defun dbx (command-line) @@ -1219,20 +1253,20 @@ It is saved for when this flag is not set.") (setq process-window (and gud-last-frame (>= (point) (process-mark proc)) - (get-buffer-window (current-buffer)))))) - (if process-window - (save-selected-window - (select-window process-window) - (gud-display-frame))) - - ;; Let the comint filter do the actual insertion. - ;; That lets us inherit various comint features. - (comint-output-filter proc output) - - ;; If we deferred text that arrived during this processing, - ;; handle it now. - (if gud-filter-pending-text - (gud-filter proc "")))))) + (get-buffer-window (current-buffer))))) + (if process-window + (save-selected-window + (select-window process-window) + (gud-display-frame))) + + ;; Let the comint filter do the actual insertion. + ;; That lets us inherit various comint features. + (comint-output-filter proc output) + + ;; If we deferred text that arrived during this processing, + ;; handle it now. + (if gud-filter-pending-text + (gud-filter proc ""))))))) (defun gud-sentinel (proc msg) (cond ((null (buffer-name (process-buffer proc)))