Mercurial > emacs
changeset 47443:b2fb48df4f9f
(gud-gdb-massage-args, gud-sdb-massage-args)
(gud-pdb-massage-args): Delete.
(gdb, sdb, pdb): Don't pass gud-*-massage-args any more.
(gud-gdb-command-name): New var. Put "--fullname" in there.
(gud-query-cmdline): Use the most recent executable as the default.
Don't add "--fullname" (it's only valid/meaningful for GDB).
(gud-xdb-marker-filter): Use match-string.
(gud-perldb-massage-args): Don't add "-d".
(gud-perldb-command-name): Add "-d".
(gud-common-init): If `massage-args' is nil, don't call it.
(gud-format-command): Don't hardcode point-min==1.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 12 Sep 2002 21:26:27 +0000 |
parents | b52ae8e973da |
children | 309437e4c4d9 |
files | lisp/gud.el |
diffstat | 1 files changed, 88 insertions(+), 85 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gud.el Thu Sep 12 20:49:44 2002 +0000 +++ b/lisp/gud.el Thu Sep 12 21:26:27 2002 +0000 @@ -214,7 +214,7 @@ ;; ====================================================================== ;; speedbar support functions and variables. -(eval-when-compile (require 'speedbar)) +(eval-when-compile (require 'speedbar)) ;For speedbar-with-attached-buffer. (defvar gud-last-speedbar-buffer nil "The last GUD buffer used.") @@ -303,11 +303,13 @@ ;; ====================================================================== ;; gdb functions -;;; History of argument lists passed to gdb. +;; History of argument lists passed to gdb. (defvar gud-gdb-history nil) -(defun gud-gdb-massage-args (file args) - args) +(defcustom gud-gdb-command-name "gdb --fullname" + "Default command to execute an executable under the GDB debugger." + :type 'string + :group 'gud) (defvar gud-gdb-marker-regexp ;; This used to use path-separator instead of ":"; @@ -383,7 +385,16 @@ (read-from-minibuffer (format "Run %s (like this): " minor-mode) (or (car-safe (symbol-value hist-sym)) - (concat (or cmd-name (symbol-name minor-mode)) " --fullname " init)) + (concat (or cmd-name (symbol-name minor-mode)) + " " + (or init + (let ((file nil)) + (dolist (f (directory-files default-directory) file) + (if (and (file-executable-p f) + (not (file-directory-p f)) + (or (not file) + (file-newer-than-file-p f file))) + (setq file f))))))) gud-minibuffer-local-map nil hist-sym))) @@ -394,7 +405,7 @@ and source-file directory for your debugger." (interactive (list (gud-query-cmdline 'gdb))) - (gud-common-init command-line 'gud-gdb-massage-args + (gud-common-init command-line nil 'gud-gdb-marker-filter 'gud-gdb-find-file) (set (make-local-variable 'gud-minor-mode) 'gdb) @@ -621,7 +632,7 @@ ;; ====================================================================== ;; sdb functions -;;; History of argument lists passed to sdb. +;; History of argument lists passed to sdb. (defvar gud-sdb-history nil) (defvar gud-sdb-needs-tags (not (file-exists-p "/var")) @@ -629,8 +640,6 @@ (defvar gud-sdb-lastfile nil) -(defun gud-sdb-massage-args (file args) args) - (defun gud-sdb-marker-filter (string) (setq gud-marker-acc (if gud-marker-acc (concat gud-marker-acc string) string)) @@ -696,7 +705,7 @@ (file-exists-p tags-file-name)))) (error "The sdb support requires a valid tags table to work")) - (gud-common-init command-line 'gud-sdb-massage-args + (gud-common-init command-line nil 'gud-sdb-marker-filter 'gud-sdb-find-file) (set (make-local-variable 'gud-minor-mode) 'sdb) @@ -719,7 +728,7 @@ ;; ====================================================================== ;; dbx functions -;;; History of argument lists passed to dbx. +;; History of argument lists passed to dbx. (defvar gud-dbx-history nil) (defcustom gud-dbx-directories nil @@ -1074,7 +1083,7 @@ ;; ====================================================================== ;; xdb (HP PARISC debugger) functions -;;; History of argument lists passed to xdb. +;; History of argument lists passed to xdb. (defvar gud-xdb-history nil) (defcustom gud-xdb-directories nil @@ -1125,10 +1134,8 @@ result) (string-match "[^: \t]+:[ \t]+\\([^:]+\\): [^:]+: \\([0-9]+\\):" result)) - (let ((line (string-to-int - (substring result (match-beginning 2) (match-end 2)))) - (file (gud-xdb-file-name - (substring result (match-beginning 1) (match-end 1))))) + (let ((line (string-to-int (match-string 2 result))) + (file (gud-xdb-file-name (match-string 1 result)))) (if file (setq gud-last-frame (cons file line)))))) (or result ""))) @@ -1176,19 +1183,18 @@ ;; ====================================================================== ;; perldb functions -;;; History of argument lists passed to perldb. +;; History of argument lists passed to perldb. (defvar gud-perldb-history nil) -;; Convert a command line as would be typed normally to run a script -;; into one that invokes an Emacs-enabled debugging session. -;; "-d" in inserted as the first switch, and "-emacs" is inserted where -;; it will be $ARGV[0] (see perl5db.pl). (defun gud-perldb-massage-args (file args) - (let* ((new-args (list "-d")) + "Convert a command line as would be typed normally to run perldb +into one that invokes an Emacs-enabled debugging session. +\"-emacs\" is inserted where it will be $ARGV[0] (see perl5db.pl)." + ;; FIXME: what if the command is `make perldb' and doesn't accept those extra + ;; arguments ? + (let* ((new-args nil) (seen-e nil) - (shift (lambda () - (setq new-args (cons (car args) new-args)) - (setq args (cdr args))))) + (shift (lambda () (push (pop args) new-args)))) ;; Pass all switches and -e scripts through. (while (and args @@ -1275,8 +1281,8 @@ (defun gud-perldb-find-file (f) (find-file-noselect f)) -(defcustom gud-perldb-command-name "perl" - "File name for executing Perl." +(defcustom gud-perldb-command-name "perl -d" + "Default command to execute a Perl script under debugger." :type 'string :group 'gud) @@ -1310,12 +1316,9 @@ ;; ====================================================================== ;; pdb (Python debugger) functions -;;; History of argument lists passed to pdb. +;; History of argument lists passed to pdb. (defvar gud-pdb-history nil) -(defun gud-pdb-massage-args (file args) - args) - ;; Last group is for return value, e.g. "> test.py(2)foo()->None" ;; Either file or function name may be omitted: "> <string>(0)?()" (defvar gud-pdb-marker-regexp @@ -1398,7 +1401,7 @@ (interactive (list (gud-query-cmdline 'pdb))) - (gud-common-init command-line 'gud-pdb-massage-args + (gud-common-init command-line nil 'gud-pdb-marker-filter 'gud-pdb-find-file) (set (make-local-variable 'gud-minor-mode) 'pdb) @@ -1536,7 +1539,7 @@ "Java/jdb classpath directories list. If `gud-jdb-use-classpath' is non-nil, gud-jdb derives the `gud-jdb-classpath' list automatically using the following methods in sequence -(with subsequent successful steps overriding the results of previous +\(with subsequent successful steps overriding the results of previous steps): 1) Read the CLASSPATH environment variable, @@ -2103,46 +2106,46 @@ ;; -;;; When we send a command to the debugger via gud-call, it's annoying -;;; to see the command and the new prompt inserted into the debugger's -;;; buffer; we have other ways of knowing the command has completed. -;;; -;;; If the buffer looks like this: -;;; -------------------- -;;; (gdb) set args foo bar -;;; (gdb) -!- -;;; -------------------- -;;; (the -!- marks the location of point), and we type `C-x SPC' in a -;;; source file to set a breakpoint, we want the buffer to end up like -;;; this: -;;; -------------------- -;;; (gdb) set args foo bar -;;; Breakpoint 1 at 0x92: file make-docfile.c, line 49. -;;; (gdb) -!- -;;; -------------------- -;;; Essentially, the old prompt is deleted, and the command's output -;;; and the new prompt take its place. -;;; -;;; Not echoing the command is easy enough; you send it directly using -;;; process-send-string, and it never enters the buffer. However, -;;; getting rid of the old prompt is trickier; you don't want to do it -;;; when you send the command, since that will result in an annoying -;;; flicker as the prompt is deleted, redisplay occurs while Emacs -;;; waits for a response from the debugger, and the new prompt is -;;; inserted. Instead, we'll wait until we actually get some output -;;; from the subprocess before we delete the prompt. If the command -;;; produced no output other than a new prompt, that prompt will most -;;; likely be in the first chunk of output received, so we will delete -;;; the prompt and then replace it with an identical one. If the -;;; command produces output, the prompt is moving anyway, so the -;;; flicker won't be annoying. -;;; -;;; So - when we want to delete the prompt upon receipt of the next -;;; chunk of debugger output, we position gud-delete-prompt-marker at -;;; the start of the prompt; the process filter will notice this, and -;;; delete all text between it and the process output marker. If -;;; gud-delete-prompt-marker points nowhere, we leave the current -;;; prompt alone. +;; When we send a command to the debugger via gud-call, it's annoying +;; to see the command and the new prompt inserted into the debugger's +;; buffer; we have other ways of knowing the command has completed. +;; +;; If the buffer looks like this: +;; -------------------- +;; (gdb) set args foo bar +;; (gdb) -!- +;; -------------------- +;; (the -!- marks the location of point), and we type `C-x SPC' in a +;; source file to set a breakpoint, we want the buffer to end up like +;; this: +;; -------------------- +;; (gdb) set args foo bar +;; Breakpoint 1 at 0x92: file make-docfile.c, line 49. +;; (gdb) -!- +;; -------------------- +;; Essentially, the old prompt is deleted, and the command's output +;; and the new prompt take its place. +;; +;; Not echoing the command is easy enough; you send it directly using +;; process-send-string, and it never enters the buffer. However, +;; getting rid of the old prompt is trickier; you don't want to do it +;; when you send the command, since that will result in an annoying +;; flicker as the prompt is deleted, redisplay occurs while Emacs +;; waits for a response from the debugger, and the new prompt is +;; inserted. Instead, we'll wait until we actually get some output +;; from the subprocess before we delete the prompt. If the command +;; produced no output other than a new prompt, that prompt will most +;; likely be in the first chunk of output received, so we will delete +;; the prompt and then replace it with an identical one. If the +;; command produces output, the prompt is moving anyway, so the +;; flicker won't be annoying. +;; +;; So - when we want to delete the prompt upon receipt of the next +;; chunk of debugger output, we position gud-delete-prompt-marker at +;; the start of the prompt; the process filter will notice this, and +;; delete all text between it and the process output marker. If +;; gud-delete-prompt-marker points nowhere, we leave the current +;; prompt alone. (defvar gud-delete-prompt-marker nil) @@ -2270,7 +2273,7 @@ (if w (setcar w file))) (apply 'make-comint (concat "gud" filepart) program nil - (funcall massage-args file args))) + (if massage-args (funcall massage-args file args) args))) ;; Since comint clobbered the mode, we don't set it until now. (gud-mode) (make-local-variable 'gud-marker-filter) @@ -2438,10 +2441,10 @@ (goto-char pos)))) (set-window-point window overlay-arrow-position))))) -;;; The gud-call function must do the right thing whether its invoking -;;; keystroke is from the GUD buffer itself (via major-mode binding) -;;; or a C buffer. In the former case, we want to supply data from -;;; gud-last-frame. Here's how we do it: +;; The gud-call function must do the right thing whether its invoking +;; keystroke is from the GUD buffer itself (via major-mode binding) +;; or a C buffer. In the former case, we want to supply data from +;; gud-last-frame. Here's how we do it: (defun gud-format-command (str arg) (let ((insource (not (eq (current-buffer) gud-comint-buffer))) @@ -2469,7 +2472,7 @@ (if insource (save-restriction (widen) - (+ (count-lines 1 (point)) + (+ (count-lines (point-min) (point)) (if (bolp) 1 0))) (cdr frame))))) ((eq key ?e) @@ -2537,12 +2540,12 @@ (gud-display-frame) (recenter arg)) -;;; Code for parsing expressions out of C code. The single entry point is -;;; find-c-expr, which tries to return an lvalue expression from around point. -;;; -;;; The rest of this file is a hacked version of gdbsrc.el by -;;; Debby Ayers <ayers@asc.slb.com>, -;;; Rich Schaefer <schaefer@asc.slb.com> Schlumberger, Austin, Tx. +;; Code for parsing expressions out of C code. The single entry point is +;; find-c-expr, which tries to return an lvalue expression from around point. +;; +;; The rest of this file is a hacked version of gdbsrc.el by +;; Debby Ayers <ayers@asc.slb.com>, +;; Rich Schaefer <schaefer@asc.slb.com> Schlumberger, Austin, Tx. (defun gud-find-c-expr () "Returns the C expr that surrounds point."