annotate lisp/progmodes/gud.el @ 98182:19ec1646fe6c

The Rmail/mbox merge has been abandoned in favor of a restart using the current rmail.el file. A comprehensive list of changes will be supplied when pmail.el is morphed back into rmail.el The current status is that pmail.el supports basic Rmail navigation (no summary support) and shows the current message in a special buffer using buffer-swap-text. No decoding is done yet. That is the next step.
author Paul Reilly <pmr@pajato.com>
date Mon, 15 Sep 2008 20:56:53 +0000
parents 72d94dcf4480
children e358c1f2f0ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1 ;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
4 ;; Maintainer: FSF
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
5 ;; Keywords: unix, tools
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
6
64697
7767f4fb012a * progmodes/gdb-ui.el (gdb-enable-debug-log): Add autoload cookie.
Nick Roberts <nickrob@snap.net.nz>
parents: 64345
diff changeset
7 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2003,
79717
a1342e6e097a Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 79668
diff changeset
8 ;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
9
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
11
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94477
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94477
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94477
diff changeset
15 ;; (at your option) any later version.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
16
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
21
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94477
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
24
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
25 ;;; Commentary:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
26
91940
10cfb707cf0e *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 91939
diff changeset
27 ;; The ancestral gdb.el was by W. Schelter <wfs@rascal.ics.utexas.edu>.
10cfb707cf0e *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 91939
diff changeset
28 ;; It was later rewritten by rms. Some ideas were due to Masanobu. Grand
62825
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
29 ;; Unification (sdb/dbx support) by Eric S. Raymond <esr@thyrsus.com> Barry
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
30 ;; Warsaw <bwarsaw@cen.com> hacked the mode to use comint.el. Shane Hartman
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
31 ;; <shane@spr.com> added support for xdb (HPUX debugger). Rick Sladkey
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
32 ;; <jrs@world.std.com> wrote the GDB command completion code. Dave Love
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
33 ;; <d.love@dl.ac.uk> added the IRIX kluge, re-implemented the Mips-ish variant
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
34 ;; and added a menu. Brian D. Carlstrom <bdc@ai.mit.edu> combined the IRIX
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
35 ;; kluge with the gud-xdb-directories hack producing gud-dbx-directories.
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
36 ;; Derek L. Davies <ddavies@world.std.com> added support for jdb (Java
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
37 ;; debugger.)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
38
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
39 ;;; Code:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
40
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
41 (eval-when-compile (require 'cl)) ; for case macro
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
42
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
43 (require 'comint)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
44
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
45 (defvar gdb-active-process)
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
46 (defvar gdb-define-alist)
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
47 (defvar gdb-macro-info)
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
48 (defvar gdb-server-prefix)
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
49 (defvar gdb-show-changed-values)
85589
a86030d75a46 (gdb-source-window, gud-tooltip-mode)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85503
diff changeset
50 (defvar gdb-source-window)
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
51 (defvar gdb-var-list)
67097
9af04bbaf1e0 (gud-speedbar-menu-items): Add gdb-speedbar-auto-raise as radio button.
Nick Roberts <nickrob@snap.net.nz>
parents: 66978
diff changeset
52 (defvar gdb-speedbar-auto-raise)
85589
a86030d75a46 (gdb-source-window, gud-tooltip-mode)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85503
diff changeset
53 (defvar gud-tooltip-mode)
a86030d75a46 (gdb-source-window, gud-tooltip-mode)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85503
diff changeset
54 (defvar hl-line-mode)
a86030d75a46 (gdb-source-window, gud-tooltip-mode)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85503
diff changeset
55 (defvar hl-line-sticky-flag)
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
56 (defvar tool-bar-map)
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
57
85589
a86030d75a46 (gdb-source-window, gud-tooltip-mode)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85503
diff changeset
58
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
59 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
60 ;; GUD commands must be visible in C buffers visited by GUD
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
61
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
62 (defgroup gud nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
63 "Grand Unified Debugger mode for gdb and other debuggers under Emacs.
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
64 Supported debuggers include gdb, sdb, dbx, xdb, perldb, pdb (Python) and jdb."
82353
02af9b581498 (gud): Change to group `processes'.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
65 :group 'processes
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
66 :group 'tools)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
67
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
68
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
69 (defcustom gud-key-prefix "\C-x\C-a"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
70 "Prefix of all GUD commands valid in C buffers."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
71 :type 'string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
72 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
73
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
74 (global-set-key (concat gud-key-prefix "\C-l") 'gud-refresh)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
75 (define-key ctl-x-map " " 'gud-break) ;; backward compatibility hack
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
76
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
77 (defvar gud-marker-filter nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
78 (put 'gud-marker-filter 'permanent-local t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
79 (defvar gud-find-file nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
80 (put 'gud-find-file 'permanent-local t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
81
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
82 (defun gud-marker-filter (&rest args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
83 (apply gud-marker-filter args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
84
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
85 (defvar gud-minor-mode nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
86 (put 'gud-minor-mode 'permanent-local t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
87
70248
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
88 (defvar gud-comint-buffer nil)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
89
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
90 (defvar gud-keep-buffer nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
91
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
92 (defun gud-symbol (sym &optional soft minor-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
93 "Return the symbol used for SYM in MINOR-MODE.
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
94 MINOR-MODE defaults to `gud-minor-mode'.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
95 The symbol returned is `gud-<MINOR-MODE>-<SYM>'.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
96 If SOFT is non-nil, returns nil if the symbol doesn't already exist."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
97 (unless (or minor-mode gud-minor-mode) (error "Gud internal error"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
98 (funcall (if soft 'intern-soft 'intern)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
99 (format "gud-%s-%s" (or minor-mode gud-minor-mode) sym)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
100
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
101 (defun gud-val (sym &optional minor-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
102 "Return the value of `gud-symbol' SYM. Default to nil."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
103 (let ((sym (gud-symbol sym t minor-mode)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
104 (if (boundp sym) (symbol-value sym))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
105
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
106 (defvar gud-running nil
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
107 "Non-nil if debugged program is running.
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
108 Used to grey out relevant toolbar icons.")
61564
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
109
85503
59ee4068f60b * progmodes/gud.el (gud-target-name): Move definition before use.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85114
diff changeset
110 (defvar gud-target-name "--unknown--"
59ee4068f60b * progmodes/gud.el (gud-target-name): Move definition before use.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85114
diff changeset
111 "The apparent name of the program being debugged in a gud buffer.")
78768
d8140314e60f (gdb-ready): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 78533
diff changeset
112
61564
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
113 ;; Use existing Info buffer, if possible.
59851
d5e850d3f67f (gud-goto-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 58535
diff changeset
114 (defun gud-goto-info ()
d5e850d3f67f (gud-goto-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 58535
diff changeset
115 "Go to relevant Emacs info node."
d5e850d3f67f (gud-goto-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 58535
diff changeset
116 (interactive)
61564
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
117 (let ((same-window-regexps same-window-regexps)
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
118 (display-buffer-reuse-frames t))
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
119 (catch 'info-found
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
120 (walk-windows
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
121 '(lambda (window)
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
122 (if (eq (window-buffer window) (get-buffer "*info*"))
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
123 (progn
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
124 (setq same-window-regexps nil)
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
125 (throw 'info-found nil))))
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
126 nil 0)
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
127 (select-frame (make-frame)))
2e1a9a226cee (gud-goto-info): Use existing Info buffer, if
Nick Roberts <nickrob@snap.net.nz>
parents: 61495
diff changeset
128 (if (memq gud-minor-mode '(gdbmi gdba))
62825
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
129 (info "(emacs)GDB Graphical Interface")
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
130 (info "(emacs)Debuggers"))))
59851
d5e850d3f67f (gud-goto-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 58535
diff changeset
131
66887
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
132 (defun gud-tool-bar-item-visible-no-fringe ()
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
133 (not (or (eq (buffer-local-value 'major-mode (window-buffer)) 'speedbar-mode)
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
134 (and (memq gud-minor-mode '(gdbmi gdba))
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
135 (> (car (window-fringes)) 0)))))
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
136
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
137 (defun gud-stop-subjob ()
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
138 (interactive)
71092
d0758b1b38eb (gud-stop-subjob): Make it work in all buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 70878
diff changeset
139 (with-current-buffer gud-comint-buffer
d0758b1b38eb (gud-stop-subjob): Make it work in all buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 70878
diff changeset
140 (if (string-equal gud-target-name "emacs")
d0758b1b38eb (gud-stop-subjob): Make it work in all buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 70878
diff changeset
141 (comint-stop-subjob)
98067
72d94dcf4480 (gud-stop-subjob): Using jdb, suspend threads
Nick Roberts <nickrob@snap.net.nz>
parents: 97715
diff changeset
142 (if (eq gud-minor-mode 'jdb)
72d94dcf4480 (gud-stop-subjob): Using jdb, suspend threads
Nick Roberts <nickrob@snap.net.nz>
parents: 97715
diff changeset
143 (gud-call "suspend")
72d94dcf4480 (gud-stop-subjob): Using jdb, suspend threads
Nick Roberts <nickrob@snap.net.nz>
parents: 97715
diff changeset
144 (comint-interrupt-subjob)))))
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
145
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
146 (easy-mmode-defmap gud-menu-map
94050
006de67af578 (gud-menu-map): Expand tooltip.
Nick Roberts <nickrob@snap.net.nz>
parents: 94024
diff changeset
147 '(([help] "Info (debugger)" . gud-goto-info)
80168
77d3ee77571c Rename menu item to "Show GUD tooltips".
Nick Roberts <nickrob@snap.net.nz>
parents: 80136
diff changeset
148 ([tooltips] menu-item "Show GUD tooltips" gud-tooltip-mode
66769
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
149 :enable (and (not emacs-basic-display)
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
150 (display-graphic-p)
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
151 (fboundp 'x-show-tip))
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
152 :visible (memq gud-minor-mode
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
153 '(gdbmi gdba dbx sdb xdb pdb))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
154 :button (:toggle . gud-tooltip-mode))
54902
0895b563f562 (gud-menu-map, gud-tool-bar-map): Add help button.
Nick Roberts <nickrob@snap.net.nz>
parents: 54647
diff changeset
155 ([refresh] "Refresh" . gud-refresh)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
156 ([run] menu-item "Run" gud-run
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
157 :enable (not gud-running)
76904
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
158 :visible (memq gud-minor-mode '(gdbmi gdb dbx jdb)))
71221
07cd76eb8e03 (gud-menu-map): Use a conditional help echo for gud-go.
Nick Roberts <nickrob@snap.net.nz>
parents: 71102
diff changeset
159 ([go] menu-item (if gdb-active-process "Continue" "Run") gud-go
66897
b9eae5edf0dc (gud-menu-map): Make visibility of stop and
Nick Roberts <nickrob@snap.net.nz>
parents: 66887
diff changeset
160 :visible (and (not gud-running)
b9eae5edf0dc (gud-menu-map): Make visibility of stop and
Nick Roberts <nickrob@snap.net.nz>
parents: 66887
diff changeset
161 (eq gud-minor-mode 'gdba)))
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
162 ([stop] menu-item "Stop" gud-stop-subjob
77624
cb9aae08782f (gud-menu-map): Pdb can't handle SIGINT so
Nick Roberts <nickrob@snap.net.nz>
parents: 77147
diff changeset
163 :visible (or (not (memq gud-minor-mode '(gdba pdb)))
66897
b9eae5edf0dc (gud-menu-map): Make visibility of stop and
Nick Roberts <nickrob@snap.net.nz>
parents: 66887
diff changeset
164 (and gud-running
b9eae5edf0dc (gud-menu-map): Make visibility of stop and
Nick Roberts <nickrob@snap.net.nz>
parents: 66887
diff changeset
165 (eq gud-minor-mode 'gdba))))
52586
a0055e15e603 (perldb): Add gud-until to list of commands.
Nick Roberts <nickrob@snap.net.nz>
parents: 52524
diff changeset
166 ([until] menu-item "Continue to selection" gud-until
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
167 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
168 :visible (and (memq gud-minor-mode '(gdbmi gdba gdb perldb))
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
169 (gud-tool-bar-item-visible-no-fringe)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
170 ([remove] menu-item "Remove Breakpoint" gud-remove
65883
46ec04efd3cc (gud-menu-map): Only display un-intuitive
Nick Roberts <nickrob@snap.net.nz>
parents: 65584
diff changeset
171 :enable (not gud-running)
66887
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
172 :visible (gud-tool-bar-item-visible-no-fringe))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
173 ([tbreak] menu-item "Temporary Breakpoint" gud-tbreak
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
174 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
175 :visible (memq gud-minor-mode
76166
5b3f284c883e (gud, gud-menu-map): Remove references to bash/bashdb.
Nick Roberts <nickrob@snap.net.nz>
parents: 75756
diff changeset
176 '(gdbmi gdba gdb sdb xdb)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
177 ([break] menu-item "Set Breakpoint" gud-break
65883
46ec04efd3cc (gud-menu-map): Only display un-intuitive
Nick Roberts <nickrob@snap.net.nz>
parents: 65584
diff changeset
178 :enable (not gud-running)
66887
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
179 :visible (gud-tool-bar-item-visible-no-fringe))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
180 ([up] menu-item "Up Stack" gud-up
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
181 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
182 :visible (memq gud-minor-mode
76166
5b3f284c883e (gud, gud-menu-map): Remove references to bash/bashdb.
Nick Roberts <nickrob@snap.net.nz>
parents: 75756
diff changeset
183 '(gdbmi gdba gdb dbx xdb jdb pdb)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
184 ([down] menu-item "Down Stack" gud-down
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
185 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
186 :visible (memq gud-minor-mode
76166
5b3f284c883e (gud, gud-menu-map): Remove references to bash/bashdb.
Nick Roberts <nickrob@snap.net.nz>
parents: 75756
diff changeset
187 '(gdbmi gdba gdb dbx xdb jdb pdb)))
69476
1db3b0eac5a2 (gud-speedbar-buttons): Follow change to gdb-var-list.
Nick Roberts <nickrob@snap.net.nz>
parents: 69326
diff changeset
188 ([pp] menu-item "Print S-expression" gud-pp
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
189 :enable (and (not gud-running)
66769
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
190 gdb-active-process)
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
191 :visible (and (string-equal
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
192 (buffer-local-value
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
193 'gud-target-name gud-comint-buffer) "emacs")
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
194 (eq gud-minor-mode 'gdba)))
63031
ae951edf75a6 (gdb, gud-menu-map): Add command to evaluate
Nick Roberts <nickrob@snap.net.nz>
parents: 62825
diff changeset
195 ([print*] menu-item "Print Dereference" gud-pstar
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
196 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
197 :visible (memq gud-minor-mode '(gdbmi gdba gdb)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
198 ([print] menu-item "Print Expression" gud-print
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
199 :enable (not gud-running))
52699
7fbe60aaf857 (gud-menu-map, gud-tool-bar-map): Replace
Nick Roberts <nickrob@snap.net.nz>
parents: 52586
diff changeset
200 ([watch] menu-item "Watch Expression" gud-watch
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
201 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
202 :visible (memq gud-minor-mode '(gdbmi gdba)))
67251
299942030b0e (gud-menu-map): Put gud-finish back on the
Nick Roberts <nickrob@snap.net.nz>
parents: 67165
diff changeset
203 ([finish] menu-item "Finish Function" gud-finish
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
204 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
205 :visible (memq gud-minor-mode
76166
5b3f284c883e (gud, gud-menu-map): Remove references to bash/bashdb.
Nick Roberts <nickrob@snap.net.nz>
parents: 75756
diff changeset
206 '(gdbmi gdba gdb xdb jdb pdb)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
207 ([stepi] menu-item "Step Instruction" gud-stepi
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
208 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
209 :visible (memq gud-minor-mode '(gdbmi gdba gdb dbx)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
210 ([nexti] menu-item "Next Instruction" gud-nexti
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
211 :enable (not gud-running)
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
212 :visible (memq gud-minor-mode '(gdbmi gdba gdb dbx)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
213 ([step] menu-item "Step Line" gud-step
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
214 :enable (not gud-running))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
215 ([next] menu-item "Next Line" gud-next
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
216 :enable (not gud-running))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
217 ([cont] menu-item "Continue" gud-cont
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
218 :enable (not gud-running)
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
219 :visible (not (eq gud-minor-mode 'gdba))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
220 "Menu for `gud-mode'."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
221 :name "Gud")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
222
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
223 (easy-mmode-defmap gud-minor-mode-map
76904
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
224 (append
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
225 `(([menu-bar debug] . ("Gud" . ,gud-menu-map)))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
226 ;; Get tool bar like functionality from the menu bar on a text only
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
227 ;; terminal.
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
228 (unless window-system
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
229 `(([menu-bar down]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
230 . (,(propertize "down" 'face 'font-lock-doc-face) . gud-down))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
231 ([menu-bar up]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
232 . (,(propertize "up" 'face 'font-lock-doc-face) . gud-up))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
233 ([menu-bar finish]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
234 . (,(propertize "finish" 'face 'font-lock-doc-face) . gud-finish))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
235 ([menu-bar step]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
236 . (,(propertize "step" 'face 'font-lock-doc-face) . gud-step))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
237 ([menu-bar next]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
238 . (,(propertize "next" 'face 'font-lock-doc-face) . gud-next))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
239 ([menu-bar until] menu-item
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
240 ,(propertize "until" 'face 'font-lock-doc-face) gud-until
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
241 :visible (memq gud-minor-mode '(gdbmi gdba gdb perldb)))
76927
8199e6703268 (gud-minor-mode-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76904
diff changeset
242 ([menu-bar cont] menu-item
76904
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
243 ,(propertize "cont" 'face 'font-lock-doc-face) gud-cont
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
244 :visible (not (eq gud-minor-mode 'gdba)))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
245 ([menu-bar run] menu-item
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
246 ,(propertize "run" 'face 'font-lock-doc-face) gud-run
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
247 :visible (memq gud-minor-mode '(gdbmi gdb dbx jdb)))
78962
1e24f865fb6d (gud-gud-gdb-command-name): Fix typo in docstring.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78958
diff changeset
248 ([menu-bar go] menu-item
77144
da64d72c22b5 (gud-minor-mode-map): Make go button same
Nick Roberts <nickrob@snap.net.nz>
parents: 77073
diff changeset
249 ,(propertize " go " 'face 'font-lock-doc-face) gud-go
76904
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
250 :visible (and (not gud-running)
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
251 (eq gud-minor-mode 'gdba)))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
252 ([menu-bar stop] menu-item
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
253 ,(propertize "stop" 'face 'font-lock-doc-face) gud-stop-subjob
76927
8199e6703268 (gud-minor-mode-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76904
diff changeset
254 :visible (or gud-running
8199e6703268 (gud-minor-mode-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76904
diff changeset
255 (not (eq gud-minor-mode 'gdba))))
76904
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
256 ([menu-bar print]
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
257 . (,(propertize "print" 'face 'font-lock-doc-face) . gud-print))
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
258 ([menu-bar tools] . undefined)
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
259 ([menu-bar buffer] . undefined)
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
260 ([menu-bar options] . undefined)
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
261 ([menu-bar edit] . undefined)
ecc6f5a2f4cb (gud-menu-map): Simplify.
Nick Roberts <nickrob@snap.net.nz>
parents: 76381
diff changeset
262 ([menu-bar file] . undefined))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
263 "Map used in visited files.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
264
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
265 (let ((m (assq 'gud-minor-mode minor-mode-map-alist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
266 (if m (setcdr m gud-minor-mode-map)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
267 (push (cons 'gud-minor-mode gud-minor-mode-map) minor-mode-map-alist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
268
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
269 (defvar gud-mode-map
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
270 ;; Will inherit from comint-mode via define-derived-mode.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
271 (make-sparse-keymap)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
272 "`gud-mode' keymap.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
273
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
274 (defvar gud-tool-bar-map
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
275 (if (display-graphic-p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
276 (let ((map (make-sparse-keymap)))
66094
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
277 (dolist (x '((gud-break . "gud/break")
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
278 (gud-remove . "gud/remove")
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
279 (gud-print . "gud/print")
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
280 (gud-pstar . "gud/pstar")
66769
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
281 (gud-pp . "gud/pp")
66094
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
282 (gud-watch . "gud/watch")
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
283 (gud-run . "gud/run")
66887
a3db1720a101 (gud-menu-map, gud-tool-bar-map): Re-define buttons and include new ones.
Nick Roberts <nickrob@snap.net.nz>
parents: 66846
diff changeset
284 (gud-go . "gud/go")
66901
dd9d9aa96e9b (gud-stop-subjob): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66899
diff changeset
285 (gud-stop-subjob . "gud/stop")
66899
67dbd8019707 (gud-menu-map): Let [stop] stop program rather than kill it.
Kim F. Storm <storm@cua.dk>
parents: 66897
diff changeset
286 (gud-cont . "gud/cont")
67dbd8019707 (gud-menu-map): Let [stop] stop program rather than kill it.
Kim F. Storm <storm@cua.dk>
parents: 66897
diff changeset
287 (gud-until . "gud/until")
66105
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
288 (gud-next . "gud/next")
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
289 (gud-step . "gud/step")
66899
67dbd8019707 (gud-menu-map): Let [stop] stop program rather than kill it.
Kim F. Storm <storm@cua.dk>
parents: 66897
diff changeset
290 (gud-finish . "gud/finish")
66105
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
291 (gud-nexti . "gud/nexti")
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
292 (gud-stepi . "gud/stepi")
66094
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
293 (gud-up . "gud/up")
8d47733bcd93 * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
Bill Wohler <wohler@newt.com>
parents: 65972
diff changeset
294 (gud-down . "gud/down")
59851
d5e850d3f67f (gud-goto-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 58535
diff changeset
295 (gud-goto-info . "info"))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
296 map)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
297 (tool-bar-local-item-from-menu
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
298 (car x) (cdr x) map gud-minor-mode-map)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
299
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
300 (defun gud-file-name (f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
301 "Transform a relative file name to an absolute file name.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
302 Uses `gud-<MINOR-MODE>-directories' to find the source files."
81816
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
303 ;; When `default-directory' is a remote file name, prepend its
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
304 ;; remote part to f, which is the local file name. Fortunately,
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
305 ;; `file-remote-p' returns exactly this remote file name part (or
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
306 ;; nil otherwise).
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
307 (setq f (concat (or (file-remote-p default-directory) "") f))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
308 (if (file-exists-p f) (expand-file-name f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
309 (let ((directories (gud-val 'directories))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
310 (result nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
311 (while directories
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
312 (let ((path (expand-file-name f (car directories))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
313 (if (file-exists-p path)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
314 (setq result path
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
315 directories nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
316 (setq directories (cdr directories)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
317 result)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
318
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
319 (declare-function gdb-create-define-alist "gdb-ui" ())
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
320
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
321 (defun gud-find-file (file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
322 ;; Don't get confused by double slashes in the name that comes from GDB.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
323 (while (string-match "//+" file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
324 (setq file (replace-match "/" t t file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
325 (let ((minor-mode gud-minor-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
326 (buf (funcall (or gud-find-file 'gud-file-name) file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
327 (when (stringp buf)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
328 (setq buf (and (file-readable-p buf) (find-file-noselect buf 'nowarn))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
329 (when buf
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
330 ;; Copy `gud-minor-mode' to the found buffer to turn on the menu.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
331 (with-current-buffer buf
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
332 (set (make-local-variable 'gud-minor-mode) minor-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
333 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
334 (when (and gud-tooltip-mode
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
335 (memq gud-minor-mode '(gdbmi gdba)))
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
336 (make-local-variable 'gdb-define-alist)
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
337 (unless gdb-define-alist (gdb-create-define-alist))
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
338 (add-hook 'after-save-hook 'gdb-create-define-alist nil t))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
339 (make-local-variable 'gud-keep-buffer))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
340 buf)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
341
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
342 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
343 ;; command definition
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
344
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
345 ;; This macro is used below to define some basic debugger interface commands.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
346 ;; Of course you may use `gud-def' with any other debugger command, including
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
347 ;; user defined ones.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
348
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
349 ;; A macro call like (gud-def FUNC CMD KEY DOC) expands to a form
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
350 ;; which defines FUNC to send the command CMD to the debugger, gives
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
351 ;; it the docstring DOC, and binds that function to KEY in the GUD
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
352 ;; major mode. The function is also bound in the global keymap with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
353 ;; GUD prefix.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
354
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
355 (defmacro gud-def (func cmd key &optional doc)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
356 "Define FUNC to be a command sending CMD and bound to KEY, with
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
357 optional doc string DOC. Certain %-escapes in the string arguments
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
358 are interpreted specially if present. These are:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
359
70295
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
360 %f -- Name (without directory) of current source file.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
361 %F -- Name (without directory or extension) of current source file.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
362 %d -- Directory of current source file.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
363 %l -- Number of current source line.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
364 %e -- Text of the C lvalue or function-call expression surrounding point.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
365 %a -- Text of the hexadecimal address surrounding point.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
366 %p -- Prefix argument to the command (if any) as a number.
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
367 %c -- Fully qualified class name derived from the expression
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
368 surrounding point (jdb only).
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
369
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
370 The `current' source file is the file of the current buffer (if
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
371 we're in a C file) or the source file current at the last break or
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
372 step (if we're in the GUD buffer).
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
373 The `current' line is that of the current buffer (if we're in a
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
374 source file) or the source line number at the last break or step (if
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
375 we're in the GUD buffer)."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
376 `(progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
377 (defun ,func (arg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
378 ,@(if doc (list doc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
379 (interactive "p")
79668
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
380 (if (not gud-running)
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
381 ,(if (stringp cmd)
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
382 `(gud-call ,cmd arg)
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
383 cmd)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
384 ,(if key `(local-set-key ,(concat "\C-c" key) ',func))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
385 ,(if key `(global-set-key (vconcat gud-key-prefix ,key) ',func))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
386
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
387 ;; Where gud-display-frame should put the debugging arrow; a cons of
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
388 ;; (filename . line-number). This is set by the marker-filter, which scans
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
389 ;; the debugger's output for indications of the current program counter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
390 (defvar gud-last-frame nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
391
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
392 ;; Used by gud-refresh, which should cause gud-display-frame to redisplay
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
393 ;; the last frame, even if it's been called before and gud-last-frame has
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
394 ;; been set to nil.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
395 (defvar gud-last-last-frame nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
396
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
397 ;; All debugger-specific information is collected here.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
398 ;; Here's how it works, in case you ever need to add a debugger to the mode.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
399 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
400 ;; Each entry must define the following at startup:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
401 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
402 ;;<name>
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
403 ;; comint-prompt-regexp
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
404 ;; gud-<name>-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
405 ;; gud-<name>-marker-filter
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
406 ;; gud-<name>-find-file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
407 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
408 ;; The job of the massage-args method is to modify the given list of
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
409 ;; debugger arguments before running the debugger.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
410 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
411 ;; The job of the marker-filter method is to detect file/line markers in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
412 ;; strings and set the global gud-last-frame to indicate what display
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
413 ;; action (if any) should be triggered by the marker. Note that only
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
414 ;; whatever the method *returns* is displayed in the buffer; thus, you
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
415 ;; can filter the debugger's output, interpreting some and passing on
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
416 ;; the rest.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
417 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
418 ;; The job of the find-file method is to visit and return the buffer indicated
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
419 ;; by the car of gud-tag-frame. This may be a file name, a tag name, or
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
420 ;; something else.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
421
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
422 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
423 ;; speedbar support functions and variables.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
424 (eval-when-compile (require 'speedbar)) ;For speedbar-with-attached-buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
425
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
426 (defvar gud-last-speedbar-stackframe nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
427 "Description of the currently displayed GUD stack.
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
428 The value t means that there is no stack, and we are in display-file mode.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
429
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
430 (defvar gud-speedbar-key-map nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
431 "Keymap used when in the buffers display mode.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
432
66923
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
433 (defun gud-speedbar-item-info ()
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
434 "Display the data type of the watch expression element."
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
435 (let ((var (nth (- (line-number-at-pos (point)) 2) gdb-var-list)))
70054
e6c80fdc0101 (gud-speedbar-item-info): Display frame address for root variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 69682
diff changeset
436 (if (nth 6 var)
e6c80fdc0101 (gud-speedbar-item-info): Display frame address for root variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 69682
diff changeset
437 (speedbar-message "%s: %s" (nth 6 var) (nth 3 var))
e6c80fdc0101 (gud-speedbar-item-info): Display frame address for root variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 69682
diff changeset
438 (speedbar-message "%s" (nth 3 var)))))
66923
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
439
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
440 (defun gud-install-speedbar-variables ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
441 "Install those variables used by speedbar to enhance gud/gdb."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
442 (if gud-speedbar-key-map
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
443 nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
444 (setq gud-speedbar-key-map (speedbar-make-specialized-keymap))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
445
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
446 (define-key gud-speedbar-key-map "j" 'speedbar-edit-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
447 (define-key gud-speedbar-key-map "e" 'speedbar-edit-line)
54130
aae5a270e964 (gud-install-speedbar-variables): Bind
Nick Roberts <nickrob@snap.net.nz>
parents: 53850
diff changeset
448 (define-key gud-speedbar-key-map "\C-m" 'speedbar-edit-line)
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
449 (define-key gud-speedbar-key-map " " 'speedbar-toggle-line-expansion)
66978
40cc5f0fb379 (gud-install-speedbar-variables): Bind gud-pp to "p".
Nick Roberts <nickrob@snap.net.nz>
parents: 66923
diff changeset
450 (define-key gud-speedbar-key-map "D" 'gdb-var-delete)
40cc5f0fb379 (gud-install-speedbar-variables): Bind gud-pp to "p".
Nick Roberts <nickrob@snap.net.nz>
parents: 66923
diff changeset
451 (define-key gud-speedbar-key-map "p" 'gud-pp))
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
452
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
453 (speedbar-add-expansion-list '("GUD" gud-speedbar-menu-items
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
454 gud-speedbar-key-map
66923
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
455 gud-expansion-speedbar-buttons))
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
456
69291
928466fb1966 (gud-jdb-marker-filter): Double quote `[' in regexp for Lisp syntax.
Luc Teirlinck <teirllm@auburn.edu>
parents: 69233
diff changeset
457 (add-to-list
66923
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
458 'speedbar-mode-functions-list
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
459 '("GUD" (speedbar-item-info . gud-speedbar-item-info)
830bec4c85bb (gud-speedbar-item-info): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 66901
diff changeset
460 (speedbar-line-directory . ignore))))
54130
aae5a270e964 (gud-install-speedbar-variables): Bind
Nick Roberts <nickrob@snap.net.nz>
parents: 53850
diff changeset
461
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
462 (defvar gud-speedbar-menu-items
62825
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
463 '(["Jump to stack frame" speedbar-edit-line
69233
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
464 :visible (not (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
465 '(gdbmi gdba)))]
62825
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
466 ["Edit value" speedbar-edit-line
69233
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
467 :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
468 '(gdbmi gdba))]
62825
a6b83140d7d1 (gud-goto-info): Use info. Don't use require.
Nick Roberts <nickrob@snap.net.nz>
parents: 62395
diff changeset
469 ["Delete expression" gdb-var-delete
69233
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
470 :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
471 '(gdbmi gdba))]
67097
9af04bbaf1e0 (gud-speedbar-menu-items): Add gdb-speedbar-auto-raise as radio button.
Nick Roberts <nickrob@snap.net.nz>
parents: 66978
diff changeset
472 ["Auto raise frame" gdb-speedbar-auto-raise
9af04bbaf1e0 (gud-speedbar-menu-items): Add gdb-speedbar-auto-raise as radio button.
Nick Roberts <nickrob@snap.net.nz>
parents: 66978
diff changeset
473 :style toggle :selected gdb-speedbar-auto-raise
69233
4ec5a067baf3 (gud-speedbar-menu-items): Use
Nick Roberts <nickrob@snap.net.nz>
parents: 69181
diff changeset
474 :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
79668
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
475 '(gdbmi gdba))]
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
476 ("Output Format"
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
477 :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
478 '(gdbmi gdba))
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
479 ["Binary" (gdb-var-set-format "binary") t]
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
480 ["Natural" (gdb-var-set-format "natural") t]
5a1bd3d071b6 (gud-def): Do nothing if gud-running is t.
Nick Roberts <nickrob@snap.net.nz>
parents: 79339
diff changeset
481 ["Hexadecimal" (gdb-var-set-format "hexadecimal") t]))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
482 "Additional menu items to add to the speedbar frame.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
483
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
484 ;; Make sure our special speedbar mode is loaded
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
485 (if (featurep 'speedbar)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
486 (gud-install-speedbar-variables)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
487 (add-hook 'speedbar-load-hook 'gud-install-speedbar-variables))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
488
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
489 (defun gud-expansion-speedbar-buttons (directory zero)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
490 "Wrapper for call to `speedbar-add-expansion-list'.
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
491 DIRECTORY and ZERO are not used, but are required by the caller."
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
492 (gud-speedbar-buttons gud-comint-buffer))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
493
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
494 (defun gud-speedbar-buttons (buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
495 "Create a speedbar display based on the current state of GUD.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
496 If the GUD BUFFER is not running a supported debugger, then turn
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
497 off the specialized speedbar mode. BUFFER is not used, but is
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
498 required by the caller."
67403
adbf404cf806 (gud-speedbar-buttons, gud-tooltip-tips):
Nick Roberts <nickrob@snap.net.nz>
parents: 67251
diff changeset
499 (when (and gud-comint-buffer
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
500 ;; gud-comint-buffer might be killed
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
501 (buffer-name gud-comint-buffer))
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
502 (let* ((minor-mode (with-current-buffer buffer gud-minor-mode))
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
503 (window (get-buffer-window (current-buffer) 0))
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
504 (start (window-start window))
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
505 (p (window-point window)))
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
506 (cond
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
507 ((memq minor-mode '(gdbmi gdba))
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
508 (erase-buffer)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
509 (insert "Watch Expressions:\n")
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
510 (let ((var-list gdb-var-list) parent)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
511 (while var-list
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
512 (let* (char (depth 0) (start 0) (var (car var-list))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
513 (varnum (car var)) (expr (nth 1 var))
72650
eea30f9dbecd (gud-speedbar-buttons): Allow for no type
Nick Roberts <nickrob@snap.net.nz>
parents: 72257
diff changeset
514 (type (if (nth 3 var) (nth 3 var) " "))
eea30f9dbecd (gud-speedbar-buttons): Allow for no type
Nick Roberts <nickrob@snap.net.nz>
parents: 72257
diff changeset
515 (value (nth 4 var)) (status (nth 5 var)))
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
516 (put-text-property
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
517 0 (length expr) 'face font-lock-variable-name-face expr)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
518 (put-text-property
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
519 0 (length type) 'face font-lock-type-face type)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
520 (while (string-match "\\." varnum start)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
521 (setq depth (1+ depth)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
522 start (1+ (match-beginning 0))))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
523 (if (eq depth 0) (setq parent nil))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
524 (if (or (equal (nth 2 var) "0")
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
525 (and (equal (nth 2 var) "1")
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
526 (string-match "char \\*$" type)))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
527 (speedbar-make-tag-line
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
528 'bracket ?? nil nil
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
529 (concat expr "\t" value)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
530 (if (or parent (eq status 'out-of-scope))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
531 nil 'gdb-edit-value)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
532 nil
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
533 (if gdb-show-changed-values
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
534 (or parent (case status
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
535 (changed 'font-lock-warning-face)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
536 (out-of-scope 'shadow)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
537 (t t)))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
538 t)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
539 depth)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
540 (if (eq status 'out-of-scope) (setq parent 'shadow))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
541 (if (and (nth 1 var-list)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
542 (string-match (concat varnum "\\.")
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
543 (car (nth 1 var-list))))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
544 (setq char ?-)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
545 (setq char ?+))
74487
3f957e6a97c1 (gud-speedbar-buttons): Deal with references to pointers.
Nick Roberts <nickrob@snap.net.nz>
parents: 74213
diff changeset
546 (if (string-match "\\*$\\|\\*&$" type)
68992
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
547 (speedbar-make-tag-line
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
548 'bracket char
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
549 'gdb-speedbar-expand-node varnum
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
550 (concat expr "\t" type "\t" value)
68992
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
551 (if (or parent (eq status 'out-of-scope))
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
552 nil 'gdb-edit-value)
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
553 nil
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
554 (if gdb-show-changed-values
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
555 (or parent (case status
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
556 (changed 'font-lock-warning-face)
dccdda472b02 (gud-speedbar-buttons): Update properly for
Nick Roberts <nickrob@snap.net.nz>
parents: 68966
diff changeset
557 (out-of-scope 'shadow)
69022
cd336a81f209 (gud-speedbar-buttons): Fontify watch expessions.
Nick Roberts <nickrob@snap.net.nz>
parents: 68999
diff changeset
558 (t t)))
cd336a81f209 (gud-speedbar-buttons): Fontify watch expessions.
Nick Roberts <nickrob@snap.net.nz>
parents: 68999
diff changeset
559 t)
cd336a81f209 (gud-speedbar-buttons): Fontify watch expessions.
Nick Roberts <nickrob@snap.net.nz>
parents: 68999
diff changeset
560 depth)
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
561 (speedbar-make-tag-line
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
562 'bracket char
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
563 'gdb-speedbar-expand-node varnum
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
564 (concat expr "\t" type)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
565 nil nil
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
566 (if (and (or parent status) gdb-show-changed-values)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
567 'shadow t)
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
568 depth))))
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
569 (setq var-list (cdr var-list)))))
68966
c0cb4d23d9c9 (gud-speedbar-buttons): Use shadow face for
Nick Roberts <nickrob@snap.net.nz>
parents: 68900
diff changeset
570 (t (unless (and (save-excursion
c0cb4d23d9c9 (gud-speedbar-buttons): Use shadow face for
Nick Roberts <nickrob@snap.net.nz>
parents: 68900
diff changeset
571 (goto-char (point-min))
c0cb4d23d9c9 (gud-speedbar-buttons): Use shadow face for
Nick Roberts <nickrob@snap.net.nz>
parents: 68900
diff changeset
572 (looking-at "Current Stack:"))
c0cb4d23d9c9 (gud-speedbar-buttons): Use shadow face for
Nick Roberts <nickrob@snap.net.nz>
parents: 68900
diff changeset
573 (equal gud-last-last-frame gud-last-speedbar-stackframe))
65953
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
574 (let ((gud-frame-list
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
575 (cond ((eq minor-mode 'gdb)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
576 (gud-gdb-get-stackframe buffer))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
577 ;; Add more debuggers here!
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
578 (t (speedbar-remove-localized-speedbar-support buffer)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
579 nil))))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
580 (erase-buffer)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
581 (if (not gud-frame-list)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
582 (insert "No Stack frames\n")
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
583 (insert "Current Stack:\n"))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
584 (dolist (frame gud-frame-list)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
585 (insert (nth 1 frame) ":\n")
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
586 (if (= (length frame) 2)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
587 (progn
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
588 (speedbar-insert-button (car frame)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
589 'speedbar-directory-face
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
590 nil nil nil t))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
591 (speedbar-insert-button
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
592 (car frame)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
593 'speedbar-file-face
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
594 'speedbar-highlight-face
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
595 (cond ((memq minor-mode '(gdbmi gdba gdb))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
596 'gud-gdb-goto-stackframe)
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
597 (t (error "Should never be here")))
0f60854c0845 (gud-last-speedbar-buffer): Remove.
Nick Roberts <nickrob@snap.net.nz>
parents: 65932
diff changeset
598 frame t))))
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
599 (setq gud-last-speedbar-stackframe gud-last-last-frame))))
70373
6ea65e989ee0 (gdb-force-update): Delete defvar
Nick Roberts <nickrob@snap.net.nz>
parents: 70295
diff changeset
600 (set-window-start window start)
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
601 (set-window-point window p))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
602
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
603
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
604 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
605 ;; gdb functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
606
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
607 ;; History of argument lists passed to gdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
608 (defvar gud-gdb-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
609
78958
4271aaaba691 (gud-gud-gdb-command-name): New option.
Nick Roberts <nickrob@snap.net.nz>
parents: 78948
diff changeset
610 (defcustom gud-gud-gdb-command-name "gdb --fullname"
4271aaaba691 (gud-gud-gdb-command-name): New option.
Nick Roberts <nickrob@snap.net.nz>
parents: 78948
diff changeset
611 "Default command to run an executable under GDB in text command mode.
78962
1e24f865fb6d (gud-gud-gdb-command-name): Fix typo in docstring.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78958
diff changeset
612 The option \"--fullname\" must be included in this value."
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
613 :type 'string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
614 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
615
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
616 (defvar gud-gdb-marker-regexp
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
617 ;; This used to use path-separator instead of ":";
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
618 ;; however, we found that on both Windows 32 and MSDOS
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
619 ;; a colon is correct here.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
620 (concat "\032\032\\(.:?[^" ":" "\n]*\\)" ":"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
621 "\\([0-9]*\\)" ":" ".*\n"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
622
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
623 ;; There's no guarantee that Emacs will hand the filter the entire
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
624 ;; marker at once; it could be broken up across several strings. We
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
625 ;; might even receive a big chunk with several markers in it. If we
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
626 ;; receive a chunk of text which looks like it might contain the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
627 ;; beginning of a marker, we save it here between calls to the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
628 ;; filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
629 (defvar gud-marker-acc "")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
630 (make-variable-buffer-local 'gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
631
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
632 (defun gud-gdb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
633 (setq gud-marker-acc (concat gud-marker-acc string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
634 (let ((output ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
635
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
636 ;; Process all the complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
637 (while (string-match gud-gdb-marker-regexp gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
638 (setq
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
639
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
640 ;; Extract the frame position from the marker.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
641 gud-last-frame (cons (match-string 1 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
642 (string-to-number (match-string 2 gud-marker-acc)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
643
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
644 ;; Append any text before the marker to the output we're going
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
645 ;; to return - we don't include the marker in this text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
646 output (concat output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
647 (substring gud-marker-acc 0 (match-beginning 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
648
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
649 ;; Set the accumulator to the remaining text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
650 gud-marker-acc (substring gud-marker-acc (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
651
54130
aae5a270e964 (gud-install-speedbar-variables): Bind
Nick Roberts <nickrob@snap.net.nz>
parents: 53850
diff changeset
652 ;; Check for annotations and change gud-minor-mode to 'gdba if
aae5a270e964 (gud-install-speedbar-variables): Bind
Nick Roberts <nickrob@snap.net.nz>
parents: 53850
diff changeset
653 ;; they are found.
53345
c3cf2ae8eba0 (gud-gdb-command-name): Set default to
Nick Roberts <nickrob@snap.net.nz>
parents: 53250
diff changeset
654 (while (string-match "\n\032\032\\(.*\\)\n" gud-marker-acc)
63731
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
655 (let ((match (match-string 1 gud-marker-acc)))
67165
9ca7308880f8 (gud-gdb-marker-filter): When GDB is invoked with a process number, detect it.
Nick Roberts <nickrob@snap.net.nz>
parents: 67097
diff changeset
656
63731
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
657 (setq
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
658 ;; Append any text before the marker to the output we're going
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
659 ;; to return - we don't include the marker in this text.
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
660 output (concat output
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
661 (substring gud-marker-acc 0 (match-beginning 0)))
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
662
63731
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
663 ;; Set the accumulator to the remaining text.
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
664
78945
07537c759a20 (gdb): Make gdba default and switch to gdb
Nick Roberts <nickrob@snap.net.nz>
parents: 78931
diff changeset
665 gud-marker-acc (substring gud-marker-acc (match-end 0)))))
53345
c3cf2ae8eba0 (gud-gdb-command-name): Set default to
Nick Roberts <nickrob@snap.net.nz>
parents: 53250
diff changeset
666
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
667 ;; Does the remaining text look like it might end with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
668 ;; beginning of another marker? If it does, then keep it in
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
669 ;; gud-marker-acc until we receive the rest of it. Since we
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
670 ;; know the full marker regexp above failed, it's pretty simple to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
671 ;; test for marker starts.
54647
96ee39f37385 (gud-gdb-marker-filter): Include "\n" in regexp
Nick Roberts <nickrob@snap.net.nz>
parents: 54130
diff changeset
672 (if (string-match "\n\\(\032.*\\)?\\'" gud-marker-acc)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
673 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
674 ;; Everything before the potential marker start can be output.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
675 (setq output (concat output (substring gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
676 0 (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
677
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
678 ;; Everything after, we save, to combine with later input.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
679 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
680 (substring gud-marker-acc (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
681
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
682 (setq output (concat output gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
683 gud-marker-acc ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
684
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
685 output))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
686
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
687 (easy-mmode-defmap gud-minibuffer-local-map
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
688 '(("\C-i" . comint-dynamic-complete-filename))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
689 "Keymap for minibuffer prompting of gud startup command."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
690 :inherit minibuffer-local-map)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
691
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
692 (defun gud-query-cmdline (minor-mode &optional init)
71102
1cfc1ccfdfc2 (gud-query-cmdline, gud-common-init): Revert
Nick Roberts <nickrob@snap.net.nz>
parents: 71092
diff changeset
693 (let* ((hist-sym (gud-symbol 'history nil minor-mode))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
694 (cmd-name (gud-val 'command-name minor-mode)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
695 (unless (boundp hist-sym) (set hist-sym nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
696 (read-from-minibuffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
697 (format "Run %s (like this): " minor-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
698 (or (car-safe (symbol-value hist-sym))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
699 (concat (or cmd-name (symbol-name minor-mode))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
700 " "
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
701 (or init
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
702 (let ((file nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
703 (dolist (f (directory-files default-directory) file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
704 (if (and (file-executable-p f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
705 (not (file-directory-p f))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
706 (or (not file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
707 (file-newer-than-file-p f file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
708 (setq file f)))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
709 gud-minibuffer-local-map nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
710 hist-sym)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
711
53536
479dc1181cb1 (gdb-first-prompt): Renamed from
Nick Roberts <nickrob@snap.net.nz>
parents: 53443
diff changeset
712 (defvar gdb-first-prompt t)
53345
c3cf2ae8eba0 (gud-gdb-command-name): Set default to
Nick Roberts <nickrob@snap.net.nz>
parents: 53250
diff changeset
713
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
714 (defvar gud-filter-pending-text nil
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
715 "Non-nil means this is text that has been saved for later in `gud-filter'.")
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
716
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
717 ;; If in gdba mode, gdb-ui is loaded.
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
718 (declare-function gdb-restore-windows "gdb-ui" ())
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
719
79339
0c660f35bf59 (gud-gdb): Remove vestigial gdba doc and code.
Nick Roberts <nickrob@snap.net.nz>
parents: 78962
diff changeset
720 ;; The old gdb command (text command mode). The new one is in gdb-ui.el.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
721 ;;;###autoload
78958
4271aaaba691 (gud-gud-gdb-command-name): New option.
Nick Roberts <nickrob@snap.net.nz>
parents: 78948
diff changeset
722 (defun gud-gdb (command-line)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
723 "Run gdb on program FILE in buffer *gud-FILE*.
68900
7e09779fccb5 (gdb): Improve doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 68773
diff changeset
724 The directory containing FILE becomes the initial working
79339
0c660f35bf59 (gud-gdb): Remove vestigial gdba doc and code.
Nick Roberts <nickrob@snap.net.nz>
parents: 78962
diff changeset
725 directory and source-file directory for your debugger."
78958
4271aaaba691 (gud-gud-gdb-command-name): New option.
Nick Roberts <nickrob@snap.net.nz>
parents: 78948
diff changeset
726 (interactive (list (gud-query-cmdline 'gud-gdb)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
727
77073
1248605d9e44 (gdb): Restore existing session if user
Nick Roberts <nickrob@snap.net.nz>
parents: 76927
diff changeset
728 (when (and gud-comint-buffer
67403
adbf404cf806 (gud-speedbar-buttons, gud-tooltip-tips):
Nick Roberts <nickrob@snap.net.nz>
parents: 67251
diff changeset
729 (buffer-name gud-comint-buffer)
69682
99bce5a59fbf (gdb): Only complain about multiple debugging
Andreas Schwab <schwab@suse.de>
parents: 69527
diff changeset
730 (get-buffer-process gud-comint-buffer)
67403
adbf404cf806 (gud-speedbar-buttons, gud-tooltip-tips):
Nick Roberts <nickrob@snap.net.nz>
parents: 67251
diff changeset
731 (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)))
77073
1248605d9e44 (gdb): Restore existing session if user
Nick Roberts <nickrob@snap.net.nz>
parents: 76927
diff changeset
732 (gdb-restore-windows)
76381
cca5c886cdea (gdb): Pop up current GUD buffer if user
Nick Roberts <nickrob@snap.net.nz>
parents: 76166
diff changeset
733 (error
77073
1248605d9e44 (gdb): Restore existing session if user
Nick Roberts <nickrob@snap.net.nz>
parents: 76927
diff changeset
734 "Multiple debugging requires restarting in text command mode"))
69291
928466fb1966 (gud-jdb-marker-filter): Double quote `[' in regexp for Lisp syntax.
Luc Teirlinck <teirllm@auburn.edu>
parents: 69233
diff changeset
735
79339
0c660f35bf59 (gud-gdb): Remove vestigial gdba doc and code.
Nick Roberts <nickrob@snap.net.nz>
parents: 78962
diff changeset
736 (gud-common-init command-line nil 'gud-gdb-marker-filter)
0c660f35bf59 (gud-gdb): Remove vestigial gdba doc and code.
Nick Roberts <nickrob@snap.net.nz>
parents: 78962
diff changeset
737 (set (make-local-variable 'gud-minor-mode) 'gdb)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
738
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
739 (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.")
66802
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
740 (gud-def gud-tbreak "tbreak %f:%l" "\C-t"
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
741 "Set temporary breakpoint at current line.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
742 (gud-def gud-remove "clear %f:%l" "\C-d" "Remove breakpoint at current line")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
743 (gud-def gud-step "step %p" "\C-s" "Step one source line with display.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
744 (gud-def gud-stepi "stepi %p" "\C-i" "Step one instruction with display.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
745 (gud-def gud-next "next %p" "\C-n" "Step one line (skip functions).")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
746 (gud-def gud-nexti "nexti %p" nil "Step one instruction (skip functions).")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
747 (gud-def gud-cont "cont" "\C-r" "Continue with display.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
748 (gud-def gud-finish "finish" "\C-f" "Finish executing current function.")
64998
b2d245bb54da (gud-jump): Rework for gdb-ui.
Nick Roberts <nickrob@snap.net.nz>
parents: 64697
diff changeset
749 (gud-def gud-jump
b2d245bb54da (gud-jump): Rework for gdb-ui.
Nick Roberts <nickrob@snap.net.nz>
parents: 64697
diff changeset
750 (progn (gud-call "tbreak %f:%l") (gud-call "jump %f:%l"))
b2d245bb54da (gud-jump): Rework for gdb-ui.
Nick Roberts <nickrob@snap.net.nz>
parents: 64697
diff changeset
751 "\C-j" "Set execution address to current line.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
752
66802
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
753 (gud-def gud-up "up %p" "<" "Up N stack frames (numeric arg).")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
754 (gud-def gud-down "down %p" ">" "Down N stack frames (numeric arg).")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
755 (gud-def gud-print "print %e" "\C-p" "Evaluate C expression at point.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
756 (gud-def gud-pstar "print* %e" nil
63031
ae951edf75a6 (gdb, gud-menu-map): Add command to evaluate
Nick Roberts <nickrob@snap.net.nz>
parents: 62825
diff changeset
757 "Evaluate C dereferenced pointer expression at point.")
66802
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
758
66769
c57e0cf19ef5 (gud-menu-map): Ensure tool-bar is constant when using the speedbar.
Nick Roberts <nickrob@snap.net.nz>
parents: 66578
diff changeset
759 ;; For debugging Emacs only.
66802
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
760 (gud-def gud-pv "pv1 %e" "\C-v" "Print the value of the lisp variable.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
761
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
762 (gud-def gud-until "until %l" "\C-u" "Continue to current line.")
b486268fac00 (gud-menu-map): Move parentheses.
Nick Roberts <nickrob@snap.net.nz>
parents: 66773
diff changeset
763 (gud-def gud-run "run" nil "Run the program.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
764
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
765 (local-set-key "\C-i" 'gud-gdb-complete-command)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
766 (setq comint-prompt-regexp "^(.*gdb[+]?) *")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
767 (setq paragraph-start comint-prompt-regexp)
53536
479dc1181cb1 (gdb-first-prompt): Renamed from
Nick Roberts <nickrob@snap.net.nz>
parents: 53443
diff changeset
768 (setq gdb-first-prompt t)
78768
d8140314e60f (gdb-ready): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 78533
diff changeset
769 (setq gud-running nil)
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
770 (setq gud-filter-pending-text nil)
78958
4271aaaba691 (gud-gud-gdb-command-name): New option.
Nick Roberts <nickrob@snap.net.nz>
parents: 78948
diff changeset
771 (run-hooks 'gud-gdb-mode-hook))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
772
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
773 ;; One of the nice features of GDB is its impressive support for
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
774 ;; context-sensitive command completion. We preserve that feature
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
775 ;; in the GUD buffer by using a GDB command designed just for Emacs.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
776
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
777 ;; The completion process filter indicates when it is finished.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
778 (defvar gud-gdb-fetch-lines-in-progress)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
779
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
780 ;; Since output may arrive in fragments we accumulate partials strings here.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
781 (defvar gud-gdb-fetch-lines-string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
782
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
783 ;; We need to know how much of the completion to chop off.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
784 (defvar gud-gdb-fetch-lines-break)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
785
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
786 ;; The completion list is constructed by the process filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
787 (defvar gud-gdb-fetched-lines)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
788
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
789 (defun gud-gdb-complete-command (&optional command a b)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
790 "Perform completion on the GDB command preceding point.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
791 This is implemented using the GDB `complete' command which isn't
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
792 available with older versions of GDB."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
793 (interactive)
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
794 (if command
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
795 ;; Used by gud-watch in mini-buffer.
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
796 (setq command (concat "p " command))
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
797 ;; Used in GUD buffer.
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
798 (let ((end (point)))
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
799 (setq command (buffer-substring (comint-line-beginning-position) end))))
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
800 (let* ((command-word
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
801 ;; Find the word break. This match will always succeed.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
802 (and (string-match "\\(\\`\\| \\)\\([^ ]*\\)\\'" command)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
803 (substring command (match-beginning 2))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
804 (complete-list
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
805 (gud-gdb-run-command-fetch-lines (concat "complete " command)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
806 (current-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
807 ;; From string-match above.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
808 (match-beginning 2))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
809 ;; Protect against old versions of GDB.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
810 (and complete-list
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
811 (string-match "^Undefined command: \"complete\"" (car complete-list))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
812 (error "This version of GDB doesn't support the `complete' command"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
813 ;; Sort the list like readline.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
814 (setq complete-list (sort complete-list (function string-lessp)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
815 ;; Remove duplicates.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
816 (let ((first complete-list)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
817 (second (cdr complete-list)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
818 (while second
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
819 (if (string-equal (car first) (car second))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
820 (setcdr first (setq second (cdr second)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
821 (setq first second
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
822 second (cdr second)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
823 ;; Add a trailing single quote if there is a unique completion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
824 ;; and it contains an odd number of unquoted single quotes.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
825 (and (= (length complete-list) 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
826 (let ((str (car complete-list))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
827 (pos 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
828 (count 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
829 (while (string-match "\\([^'\\]\\|\\\\'\\)*'" str pos)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
830 (setq count (1+ count)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
831 pos (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
832 (and (= (mod count 2) 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
833 (setq complete-list (list (concat str "'"))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
834 ;; Let comint handle the rest.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
835 (comint-dynamic-simple-complete command-word complete-list)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
836
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
837 ;; The completion process filter is installed temporarily to slurp the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
838 ;; output of GDB up to the next prompt and build the completion list.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
839 (defun gud-gdb-fetch-lines-filter (string filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
840 "Filter used to read the list of lines output by a command.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
841 STRING is the output to filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
842 It is passed through FILTER before we look at it."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
843 (setq string (funcall filter string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
844 (setq string (concat gud-gdb-fetch-lines-string string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
845 (while (string-match "\n" string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
846 (push (substring string gud-gdb-fetch-lines-break (match-beginning 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
847 gud-gdb-fetched-lines)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
848 (setq string (substring string (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
849 (if (string-match comint-prompt-regexp string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
850 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
851 (setq gud-gdb-fetch-lines-in-progress nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
852 string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
853 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
854 (setq gud-gdb-fetch-lines-string string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
855 "")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
856
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
857 ;; gdb speedbar functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
858
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
859 (defun gud-gdb-goto-stackframe (text token indent)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
860 "Goto the stackframe described by TEXT, TOKEN, and INDENT."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
861 (speedbar-with-attached-buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
862 (gud-basic-call (concat "server frame " (nth 1 token)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
863 (sit-for 1)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
864
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
865 (defvar gud-gdb-fetched-stack-frame nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
866 "Stack frames we are fetching from GDB.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
867
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
868 ;(defun gud-gdb-get-scope-data (text token indent)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
869 ; ;; checkdoc-params: (indent)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
870 ; "Fetch data associated with a stack frame, and expand/contract it.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
871 ;Data to do this is retrieved from TEXT and TOKEN."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
872 ; (let ((args nil) (scope nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
873 ; (gud-gdb-run-command-fetch-lines "info args")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
874 ;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
875 ; (gud-gdb-run-command-fetch-lines "info local")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
876 ;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
877 ; ))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
878
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
879 (defun gud-gdb-get-stackframe (buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
880 "Extract the current stack frame out of the GUD GDB BUFFER."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
881 (let ((newlst nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
882 (fetched-stack-frame-list
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
883 (gud-gdb-run-command-fetch-lines "server backtrace" buffer)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
884 (if (and (car fetched-stack-frame-list)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
885 (string-match "No stack" (car fetched-stack-frame-list)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
886 ;; Go into some other mode???
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
887 nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
888 (dolist (e fetched-stack-frame-list)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
889 (let ((name nil) (num nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
890 (if (not (or
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
891 (string-match "^#\\([0-9]+\\) +[0-9a-fx]+ in \\([:0-9a-zA-Z_]+\\) (" e)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
892 (string-match "^#\\([0-9]+\\) +\\([:0-9a-zA-Z_]+\\) (" e)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
893 (if (not (string-match
96515
ca675825c4ef (gud-gdb-get-stackframe): Allow absolute
Nick Roberts <nickrob@snap.net.nz>
parents: 95841
diff changeset
894 "at \\([-0-9a-zA-Z_/.]+\\):\\([0-9]+\\)$" e))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
895 nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
896 (setcar newlst
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
897 (list (nth 0 (car newlst))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
898 (nth 1 (car newlst))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
899 (match-string 1 e)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
900 (match-string 2 e))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
901 (setq num (match-string 1 e)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
902 name (match-string 2 e))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
903 (setq newlst
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
904 (cons
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
905 (if (string-match
96515
ca675825c4ef (gud-gdb-get-stackframe): Allow absolute
Nick Roberts <nickrob@snap.net.nz>
parents: 95841
diff changeset
906 "at \\([-0-9a-zA-Z_/.]+\\):\\([0-9]+\\)$" e)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
907 (list name num (match-string 1 e)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
908 (match-string 2 e))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
909 (list name num))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
910 newlst)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
911 (nreverse newlst))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
912
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
913 ;(defun gud-gdb-selected-frame-info (buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
914 ; "Learn GDB information for the currently selected stack frame in BUFFER."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
915 ; )
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
916
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
917 (defun gud-gdb-run-command-fetch-lines (command buffer &optional skip)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
918 "Run COMMAND, and return the list of lines it outputs.
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
919 BUFFER is the current buffer which may be the GUD buffer in which to run.
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
920 SKIP is the number of chars to skip on each line, it defaults to 0."
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
921 (with-current-buffer gud-comint-buffer
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
922 (if (and (eq gud-comint-buffer buffer)
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
923 (save-excursion
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
924 (goto-char (point-max))
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
925 (forward-line 0)
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
926 (not (looking-at comint-prompt-regexp))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
927 nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
928 ;; Much of this copied from GDB complete, but I'm grabbing the stack
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
929 ;; frame instead.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
930 (let ((gud-gdb-fetch-lines-in-progress t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
931 (gud-gdb-fetched-lines nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
932 (gud-gdb-fetch-lines-string nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
933 (gud-gdb-fetch-lines-break (or skip 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
934 (gud-marker-filter
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
935 `(lambda (string)
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
936 (gud-gdb-fetch-lines-filter string ',gud-marker-filter))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
937 ;; Issue the command to GDB.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
938 (gud-basic-call command)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
939 ;; Slurp the output.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
940 (while gud-gdb-fetch-lines-in-progress
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
941 (accept-process-output (get-buffer-process gud-comint-buffer)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
942 (nreverse gud-gdb-fetched-lines)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
943
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
944
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
945 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
946 ;; sdb functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
947
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
948 ;; History of argument lists passed to sdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
949 (defvar gud-sdb-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
950
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
951 (defvar gud-sdb-needs-tags (not (file-exists-p "/var"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
952 "If nil, we're on a System V Release 4 and don't need the tags hack.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
953
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
954 (defvar gud-sdb-lastfile nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
955
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
956 (defun gud-sdb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
957 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
958 (if gud-marker-acc (concat gud-marker-acc string) string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
959 (let (start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
960 ;; Process all complete markers in this chunk
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
961 (while
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
962 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
963 ;; System V Release 3.2 uses this format
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
964 ((string-match "\\(^\\|\n\\)\\*?\\(0x\\w* in \\)?\\([^:\n]*\\):\\([0-9]*\\):.*\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
965 gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
966 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
967 (cons (match-string 3 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
968 (string-to-number (match-string 4 gud-marker-acc)))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
969 ;; System V Release 4.0 quite often clumps two lines together
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
970 ((string-match "^\\(BREAKPOINT\\|STEPPED\\) process [0-9]+ function [^ ]+ in \\(.+\\)\n\\([0-9]+\\):"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
971 gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
972 (setq gud-sdb-lastfile (match-string 2 gud-marker-acc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
973 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
974 (cons gud-sdb-lastfile
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
975 (string-to-number (match-string 3 gud-marker-acc)))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
976 ;; System V Release 4.0
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
977 ((string-match "^\\(BREAKPOINT\\|STEPPED\\) process [0-9]+ function [^ ]+ in \\(.+\\)\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
978 gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
979 (setq gud-sdb-lastfile (match-string 2 gud-marker-acc)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
980 ((and gud-sdb-lastfile (string-match "^\\([0-9]+\\):"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
981 gud-marker-acc start))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
982 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
983 (cons gud-sdb-lastfile
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
984 (string-to-number (match-string 1 gud-marker-acc)))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
985 (t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
986 (setq gud-sdb-lastfile nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
987 (setq start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
988
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
989 ;; Search for the last incomplete line in this chunk
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
990 (while (string-match "\n" gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
991 (setq start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
992
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
993 ;; If we have an incomplete line, store it in gud-marker-acc.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
994 (setq gud-marker-acc (substring gud-marker-acc (or start 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
995 string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
996
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
997 (defun gud-sdb-find-file (f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
998 (if gud-sdb-needs-tags (find-tag-noselect f) (find-file-noselect f)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
999
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1000 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1001 (defun sdb (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1002 "Run sdb on program FILE in buffer *gud-FILE*.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1003 The directory containing FILE becomes the initial working directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1004 and source-file directory for your debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1005 (interactive (list (gud-query-cmdline 'sdb)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1006
64345
1009f071639a (etags, sdb): Only require etags when needed.
Nick Roberts <nickrob@snap.net.nz>
parents: 64121
diff changeset
1007 (if gud-sdb-needs-tags (require 'etags))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1008 (if (and gud-sdb-needs-tags
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1009 (not (and (boundp 'tags-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1010 (stringp tags-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1011 (file-exists-p tags-file-name))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1012 (error "The sdb support requires a valid tags table to work"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1013
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1014 (gud-common-init command-line nil 'gud-sdb-marker-filter 'gud-sdb-find-file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1015 (set (make-local-variable 'gud-minor-mode) 'sdb)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1016
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1017 (gud-def gud-break "%l b" "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1018 (gud-def gud-tbreak "%l c" "\C-t" "Set temporary breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1019 (gud-def gud-remove "%l d" "\C-d" "Remove breakpoint at current line")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1020 (gud-def gud-step "s %p" "\C-s" "Step one source line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1021 (gud-def gud-stepi "i %p" "\C-i" "Step one instruction with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1022 (gud-def gud-next "S %p" "\C-n" "Step one line (skip functions).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1023 (gud-def gud-cont "c" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1024 (gud-def gud-print "%e/" "\C-p" "Evaluate C expression at point.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1025
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1026 (setq comint-prompt-regexp "\\(^\\|\n\\)\\*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1027 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1028 (run-hooks 'sdb-mode-hook)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1029 )
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1030
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1031 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1032 ;; dbx functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1033
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1034 ;; History of argument lists passed to dbx.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1035 (defvar gud-dbx-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1036
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1037 (defcustom gud-dbx-directories nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1038 "*A list of directories that dbx should search for source code.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1039 If nil, only source files in the program directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1040 will be known to dbx.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1041
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1042 The file names should be absolute, or relative to the directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1043 containing the executable being debugged."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1044 :type '(choice (const :tag "Current Directory" nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1045 (repeat :value ("")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1046 directory))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1047 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1048
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1049 (defun gud-dbx-massage-args (file args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1050 (nconc (let ((directories gud-dbx-directories)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1051 (result nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1052 (while directories
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1053 (setq result (cons (car directories) (cons "-I" result)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1054 (setq directories (cdr directories)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1055 (nreverse result))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1056 args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1057
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1058 (defun gud-dbx-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1059 (setq gud-marker-acc (if gud-marker-acc (concat gud-marker-acc string) string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1060
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1061 (let (start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1062 ;; Process all complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1063 (while (or (string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1064 "stopped in .* at line \\([0-9]*\\) in file \"\\([^\"]*\\)\""
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1065 gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1066 (string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1067 "signal .* in .* at line \\([0-9]*\\) in file \"\\([^\"]*\\)\""
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1068 gud-marker-acc start))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1069 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1070 (cons (match-string 2 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1071 (string-to-number (match-string 1 gud-marker-acc)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1072 start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1073
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1074 ;; Search for the last incomplete line in this chunk
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1075 (while (string-match "\n" gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1076 (setq start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1077
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1078 ;; If the incomplete line APPEARS to begin with another marker, keep it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1079 ;; in the accumulator. Otherwise, clear the accumulator to avoid an
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1080 ;; unnecessary concat during the next call.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1081 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1082 (if (string-match "\\(stopped\\|signal\\)" gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1083 (substring gud-marker-acc (match-beginning 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1084 nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1085 string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1086
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1087 ;; Functions for Mips-style dbx. Given the option `-emacs', documented in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1088 ;; OSF1, not necessarily elsewhere, it produces markers similar to gdb's.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1089 (defvar gud-mips-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1090 (or (string-match "^mips-[^-]*-ultrix" system-configuration)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1091 ;; We haven't tested gud on this system:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1092 (string-match "^mips-[^-]*-riscos" system-configuration)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1093 ;; It's documented on OSF/1.3
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1094 (string-match "^mips-[^-]*-osf1" system-configuration)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1095 (string-match "^alpha[^-]*-[^-]*-osf" system-configuration))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1096 "Non-nil to assume the MIPS/OSF dbx conventions (argument `-emacs').")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1097
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1098 (defvar gud-dbx-command-name
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1099 (concat "dbx" (if gud-mips-p " -emacs")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1100
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1101 ;; This is just like the gdb one except for the regexps since we need to cope
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1102 ;; with an optional breakpoint number in [] before the ^Z^Z
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1103 (defun gud-mipsdbx-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1104 (setq gud-marker-acc (concat gud-marker-acc string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1105 (let ((output ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1106
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1107 ;; Process all the complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1108 (while (string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1109 ;; This is like th gdb marker but with an optional
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1110 ;; leading break point number like `[1] '
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1111 "[][ 0-9]*\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1112 gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1113 (setq
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1114
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1115 ;; Extract the frame position from the marker.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1116 gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1117 (cons (match-string 1 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1118 (string-to-number (match-string 2 gud-marker-acc)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1119
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1120 ;; Append any text before the marker to the output we're going
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1121 ;; to return - we don't include the marker in this text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1122 output (concat output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1123 (substring gud-marker-acc 0 (match-beginning 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1124
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1125 ;; Set the accumulator to the remaining text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1126 gud-marker-acc (substring gud-marker-acc (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1127
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1128 ;; Does the remaining text look like it might end with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1129 ;; beginning of another marker? If it does, then keep it in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1130 ;; gud-marker-acc until we receive the rest of it. Since we
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1131 ;; know the full marker regexp above failed, it's pretty simple to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1132 ;; test for marker starts.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1133 (if (string-match "[][ 0-9]*\032.*\\'" gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1134 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1135 ;; Everything before the potential marker start can be output.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1136 (setq output (concat output (substring gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1137 0 (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1138
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1139 ;; Everything after, we save, to combine with later input.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1140 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1141 (substring gud-marker-acc (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1142
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1143 (setq output (concat output gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1144 gud-marker-acc ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1145
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1146 output))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1147
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1148 ;; The dbx in IRIX is a pain. It doesn't print the file name when
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1149 ;; stopping at a breakpoint (but you do get it from the `up' and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1150 ;; `down' commands...). The only way to extract the information seems
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1151 ;; to be with a `file' command, although the current line number is
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1152 ;; available in $curline. Thus we have to look for output which
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1153 ;; appears to indicate a breakpoint. Then we prod the dbx sub-process
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1154 ;; to output the information we want with a combination of the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1155 ;; `printf' and `file' commands as a pseudo marker which we can
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1156 ;; recognise next time through the marker-filter. This would be like
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1157 ;; the gdb marker but you can't get the file name without a newline...
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1158 ;; Note that gud-remove won't work since Irix dbx expects a breakpoint
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1159 ;; number rather than a line number etc. Maybe this could be made to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1160 ;; work by listing all the breakpoints and picking the one(s) with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1161 ;; correct line number, but life's too short.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1162 ;; d.love@dl.ac.uk (Dave Love) can be blamed for this
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1163
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1164 (defvar gud-irix-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1165 (and (string-match "^mips-[^-]*-irix" system-configuration)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1166 (not (string-match "irix[6-9]\\.[1-9]" system-configuration)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1167 "Non-nil to assume the interface appropriate for IRIX dbx.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1168 This works in IRIX 4, 5 and 6, but `gud-dbx-use-stopformat-p' provides
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1169 a better solution in 6.1 upwards.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1170 (defvar gud-dbx-use-stopformat-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1171 (string-match "irix[6-9]\\.[1-9]" system-configuration)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1172 "Non-nil to use the dbx feature present at least from Irix 6.1
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1173 whereby $stopformat=1 produces an output format compatible with
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1174 `gud-dbx-marker-filter'.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1175 ;; [Irix dbx seems to be a moving target. The dbx output changed
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1176 ;; subtly sometime between OS v4.0.5 and v5.2 so that, for instance,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1177 ;; the output from `up' is no longer spotted by gud (and it's probably
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1178 ;; not distinctive enough to try to match it -- use C-<, C->
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1179 ;; exclusively) . For 5.3 and 6.0, the $curline variable changed to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1180 ;; `long long'(why?!), so the printf stuff needed changing. The line
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1181 ;; number was cast to `long' as a compromise between the new `long
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1182 ;; long' and the original `int'. This is reported not to work in 6.2,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1183 ;; so it's changed back to int -- don't make your sources too long.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1184 ;; From Irix6.1 (but not 6.0?) dbx supports an undocumented feature
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1185 ;; whereby `set $stopformat=1' reportedly produces output compatible
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1186 ;; with `gud-dbx-marker-filter', which we prefer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1187
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1188 ;; The process filter is also somewhat
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1189 ;; unreliable, sometimes not spotting the markers; I don't know
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1190 ;; whether there's anything that can be done about that. It would be
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1191 ;; much better if SGI could be persuaded to (re?)instate the MIPS
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1192 ;; -emacs flag for gdb-like output (which ought to be possible as most
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1193 ;; of the communication I've had over it has been from sgi.com).]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1194
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1195 ;; this filter is influenced by the xdb one rather than the gdb one
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1196 (defun gud-irixdbx-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1197 (let (result (case-fold-search nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1198 (if (or (string-match comint-prompt-regexp string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1199 (string-match ".*\012" string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1200 (setq result (concat gud-marker-acc string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1201 gud-marker-acc "")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1202 (setq gud-marker-acc (concat gud-marker-acc string)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1203 (if result
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1204 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1205 ;; look for breakpoint or signal indication e.g.:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1206 ;; [2] Process 1267 (pplot) stopped at [params:338 ,0x400ec0]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1207 ;; Process 1281 (pplot) stopped at [params:339 ,0x400ec8]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1208 ;; Process 1270 (pplot) Floating point exception [._read._read:16 ,0x452188]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1209 ((string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1210 "^\\(\\[[0-9]+] \\)?Process +[0-9]+ ([^)]*) [^[]+\\[[^]\n]*]\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1211 result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1212 ;; prod dbx into printing out the line number and file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1213 ;; name in a form we can grok as below
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1214 (process-send-string (get-buffer-process gud-comint-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1215 "printf \"\032\032%1d:\",(int)$curline;file\n"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1216 ;; look for result of, say, "up" e.g.:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1217 ;; .pplot.pplot(0x800) ["src/pplot.f":261, 0x400c7c]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1218 ;; (this will also catch one of the lines printed by "where")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1219 ((string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1220 "^[^ ][^[]*\\[\"\\([^\"]+\\)\":\\([0-9]+\\), [^]]+]\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1221 result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1222 (let ((file (match-string 1 result)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1223 (if (file-exists-p file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1224 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1225 (cons (match-string 1 result)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1226 (string-to-number (match-string 2 result))))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1227 result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1228 ((string-match ; kluged-up marker as above
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1229 "\032\032\\([0-9]*\\):\\(.*\\)\n" result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1230 (let ((file (gud-file-name (match-string 2 result))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1231 (if (and file (file-exists-p file))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1232 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1233 (cons file
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1234 (string-to-number (match-string 1 result))))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1235 (setq result (substring result 0 (match-beginning 0))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1236 (or result "")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1237
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1238 ;; There are a couple of differences between DG's dbx output and normal
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1239 ;; dbx output which make it nontrivial to integrate this into the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1240 ;; standard dbx-marker-filter (mainly, there are a different number of
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1241 ;; backreferences). The markers look like:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1242 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1243 ;; (0) Stopped at line 10, routine main(argc=1, argv=0xeffff0e0), file t.c
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1244 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1245 ;; from breakpoints (the `(0)' there isn't constant, it's the breakpoint
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1246 ;; number), and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1247 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1248 ;; Stopped at line 13, routine main(argc=1, argv=0xeffff0e0), file t.c
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1249 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1250 ;; from signals and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1251 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1252 ;; Frame 21, line 974, routine command_loop(), file keyboard.c
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1253 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1254 ;; from up/down/where.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1255
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1256 (defun gud-dguxdbx-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1257 (setq gud-marker-acc (if gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1258 (concat gud-marker-acc string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1259 string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1260 (let ((re (concat "^\\(\\(([0-9]+) \\)?Stopped at\\|Frame [0-9]+,\\)"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1261 " line \\([0-9]+\\), routine .*, file \\([^ \t\n]+\\)"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1262 start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1263 ;; Process all complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1264 (while (string-match re gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1265 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1266 (cons (match-string 4 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1267 (string-to-number (match-string 3 gud-marker-acc)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1268 start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1269
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1270 ;; Search for the last incomplete line in this chunk
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1271 (while (string-match "\n" gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1272 (setq start (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1273
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1274 ;; If the incomplete line APPEARS to begin with another marker, keep it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1275 ;; in the accumulator. Otherwise, clear the accumulator to avoid an
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1276 ;; unnecessary concat during the next call.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1277 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1278 (if (string-match "Stopped\\|Frame" gud-marker-acc start)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1279 (substring gud-marker-acc (match-beginning 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1280 nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1281 string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1282
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1283 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1284 (defun dbx (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1285 "Run dbx on program FILE in buffer *gud-FILE*.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1286 The directory containing FILE becomes the initial working directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1287 and source-file directory for your debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1288 (interactive (list (gud-query-cmdline 'dbx)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1289
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1290 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1291 (gud-mips-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1292 (gud-common-init command-line nil 'gud-mipsdbx-marker-filter))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1293 (gud-irix-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1294 (gud-common-init command-line 'gud-dbx-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1295 'gud-irixdbx-marker-filter))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1296 (t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1297 (gud-common-init command-line 'gud-dbx-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1298 'gud-dbx-marker-filter)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1299
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1300 (set (make-local-variable 'gud-minor-mode) 'dbx)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1301
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1302 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1303 (gud-mips-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1304 (gud-def gud-up "up %p" "<" "Up (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1305 (gud-def gud-down "down %p" ">" "Down (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1306 (gud-def gud-break "stop at \"%f\":%l"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1307 "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1308 (gud-def gud-finish "return" "\C-f" "Finish executing current function."))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1309 (gud-irix-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1310 (gud-def gud-break "stop at \"%d%f\":%l"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1311 "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1312 (gud-def gud-finish "return" "\C-f" "Finish executing current function.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1313 (gud-def gud-up "up %p; printf \"\032\032%1d:\",(int)$curline;file\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1314 "<" "Up (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1315 (gud-def gud-down "down %p; printf \"\032\032%1d:\",(int)$curline;file\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1316 ">" "Down (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1317 ;; Make dbx give out the source location info that we need.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1318 (process-send-string (get-buffer-process gud-comint-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1319 "printf \"\032\032%1d:\",(int)$curline;file\n"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1320 (t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1321 (gud-def gud-up "up %p" "<" "Up (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1322 (gud-def gud-down "down %p" ">" "Down (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1323 (gud-def gud-break "file \"%d%f\"\nstop at %l"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1324 "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1325 (if gud-dbx-use-stopformat-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1326 (process-send-string (get-buffer-process gud-comint-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1327 "set $stopformat=1\n"))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1328
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1329 (gud-def gud-remove "clear %l" "\C-d" "Remove breakpoint at current line")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1330 (gud-def gud-step "step %p" "\C-s" "Step one line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1331 (gud-def gud-stepi "stepi %p" "\C-i" "Step one instruction with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1332 (gud-def gud-next "next %p" "\C-n" "Step one line (skip functions).")
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
1333 (gud-def gud-nexti "nexti %p" nil "Step one instruction (skip functions).")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1334 (gud-def gud-cont "cont" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1335 (gud-def gud-print "print %e" "\C-p" "Evaluate C expression at point.")
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
1336 (gud-def gud-run "run" nil "Run the program.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1337
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1338 (setq comint-prompt-regexp "^[^)\n]*dbx) *")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1339 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1340 (run-hooks 'dbx-mode-hook)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1341 )
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1342
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1343 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1344 ;; xdb (HP PARISC debugger) functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1345
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1346 ;; History of argument lists passed to xdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1347 (defvar gud-xdb-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1348
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1349 (defcustom gud-xdb-directories nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1350 "*A list of directories that xdb should search for source code.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1351 If nil, only source files in the program directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1352 will be known to xdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1353
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1354 The file names should be absolute, or relative to the directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1355 containing the executable being debugged."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1356 :type '(choice (const :tag "Current Directory" nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1357 (repeat :value ("")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1358 directory))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1359 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1360
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1361 (defun gud-xdb-massage-args (file args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1362 (nconc (let ((directories gud-xdb-directories)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1363 (result nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1364 (while directories
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1365 (setq result (cons (car directories) (cons "-d" result)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1366 (setq directories (cdr directories)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1367 (nreverse result))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1368 args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1369
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1370 ;; xdb does not print the lines all at once, so we have to accumulate them
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1371 (defun gud-xdb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1372 (let (result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1373 (if (or (string-match comint-prompt-regexp string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1374 (string-match ".*\012" string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1375 (setq result (concat gud-marker-acc string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1376 gud-marker-acc "")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1377 (setq gud-marker-acc (concat gud-marker-acc string)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1378 (if result
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1379 (if (or (string-match "\\([^\n \t:]+\\): [^:]+: \\([0-9]+\\)[: ]"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1380 result)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1381 (string-match "[^: \t]+:[ \t]+\\([^:]+\\): [^:]+: \\([0-9]+\\):"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1382 result))
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1383 (let ((line (string-to-number (match-string 2 result)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1384 (file (gud-file-name (match-string 1 result))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1385 (if file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1386 (setq gud-last-frame (cons file line))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1387 (or result "")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1388
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1389 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1390 (defun xdb (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1391 "Run xdb on program FILE in buffer *gud-FILE*.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1392 The directory containing FILE becomes the initial working directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1393 and source-file directory for your debugger.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1394
63404
1d2443a3e033 (xdb): Fix quoting in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 63031
diff changeset
1395 You can set the variable `gud-xdb-directories' to a list of program source
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1396 directories if your program contains sources from more than one directory."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1397 (interactive (list (gud-query-cmdline 'xdb)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1398
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1399 (gud-common-init command-line 'gud-xdb-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1400 'gud-xdb-marker-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1401 (set (make-local-variable 'gud-minor-mode) 'xdb)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1402
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1403 (gud-def gud-break "b %f:%l" "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1404 (gud-def gud-tbreak "b %f:%l\\t" "\C-t"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1405 "Set temporary breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1406 (gud-def gud-remove "db" "\C-d" "Remove breakpoint at current line")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1407 (gud-def gud-step "s %p" "\C-s" "Step one line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1408 (gud-def gud-next "S %p" "\C-n" "Step one line (skip functions).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1409 (gud-def gud-cont "c" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1410 (gud-def gud-up "up %p" "<" "Up (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1411 (gud-def gud-down "down %p" ">" "Down (numeric arg) stack frames.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1412 (gud-def gud-finish "bu\\t" "\C-f" "Finish executing current function.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1413 (gud-def gud-print "p %e" "\C-p" "Evaluate C expression at point.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1414
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1415 (setq comint-prompt-regexp "^>")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1416 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1417 (run-hooks 'xdb-mode-hook))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1418
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1419 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1420 ;; perldb functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1421
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1422 ;; History of argument lists passed to perldb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1423 (defvar gud-perldb-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1424
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1425 (defun gud-perldb-massage-args (file args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1426 "Convert a command line as would be typed normally to run perldb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1427 into one that invokes an Emacs-enabled debugging session.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1428 \"-emacs\" is inserted where it will be $ARGV[0] (see perl5db.pl)."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1429 ;; FIXME: what if the command is `make perldb' and doesn't accept those extra
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1430 ;; arguments ?
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1431 (let* ((new-args nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1432 (seen-e nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1433 (shift (lambda () (push (pop args) new-args))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1434
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1435 ;; Pass all switches and -e scripts through.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1436 (while (and args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1437 (string-match "^-" (car args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1438 (not (equal "-" (car args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1439 (not (equal "--" (car args))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1440 (when (equal "-e" (car args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1441 ;; -e goes with the next arg, so shift one extra.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1442 (or (funcall shift)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1443 ;; -e as the last arg is an error in Perl.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1444 (error "No code specified for -e"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1445 (setq seen-e t))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1446 (funcall shift))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1447
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1448 (unless seen-e
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1449 (if (or (not args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1450 (string-match "^-" (car args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1451 (error "Can't use stdin as the script to debug"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1452 ;; This is the program name.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1453 (funcall shift))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1454
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1455 ;; If -e specified, make sure there is a -- so -emacs is not taken
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1456 ;; as -e macs.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1457 (if (and args (equal "--" (car args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1458 (funcall shift)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1459 (and seen-e (push "--" new-args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1460
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1461 (push "-emacs" new-args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1462 (while args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1463 (funcall shift))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1464
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1465 (nreverse new-args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1466
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1467 ;; There's no guarantee that Emacs will hand the filter the entire
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1468 ;; marker at once; it could be broken up across several strings. We
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1469 ;; might even receive a big chunk with several markers in it. If we
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1470 ;; receive a chunk of text which looks like it might contain the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1471 ;; beginning of a marker, we save it here between calls to the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1472 ;; filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1473 (defun gud-perldb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1474 (setq gud-marker-acc (concat gud-marker-acc string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1475 (let ((output ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1476
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1477 ;; Process all the complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1478 (while (string-match "\032\032\\(\\([a-zA-Z]:\\)?[^:\n]*\\):\\([0-9]*\\):.*\n"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1479 gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1480 (setq
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1481
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1482 ;; Extract the frame position from the marker.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1483 gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1484 (cons (match-string 1 gud-marker-acc)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1485 (string-to-number (match-string 3 gud-marker-acc)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1486
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1487 ;; Append any text before the marker to the output we're going
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1488 ;; to return - we don't include the marker in this text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1489 output (concat output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1490 (substring gud-marker-acc 0 (match-beginning 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1491
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1492 ;; Set the accumulator to the remaining text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1493 gud-marker-acc (substring gud-marker-acc (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1495 ;; Does the remaining text look like it might end with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1496 ;; beginning of another marker? If it does, then keep it in
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
1497 ;; gud-marker-acc until we receive the rest of it. Since we
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1498 ;; know the full marker regexp above failed, it's pretty simple to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1499 ;; test for marker starts.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1500 (if (string-match "\032.*\\'" gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1501 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1502 ;; Everything before the potential marker start can be output.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1503 (setq output (concat output (substring gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1504 0 (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1505
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1506 ;; Everything after, we save, to combine with later input.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1507 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1508 (substring gud-marker-acc (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1509
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1510 (setq output (concat output gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1511 gud-marker-acc ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1512
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1513 output))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1514
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1515 (defcustom gud-perldb-command-name "perl -d"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1516 "Default command to execute a Perl script under debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1517 :type 'string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1518 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1519
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1520 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1521 (defun perldb (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1522 "Run perldb on program FILE in buffer *gud-FILE*.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1523 The directory containing FILE becomes the initial working directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1524 and source-file directory for your debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1525 (interactive
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1526 (list (gud-query-cmdline 'perldb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1527 (concat (or (buffer-file-name) "-e 0") " "))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1528
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1529 (gud-common-init command-line 'gud-perldb-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1530 'gud-perldb-marker-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1531 (set (make-local-variable 'gud-minor-mode) 'perldb)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1532
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1533 (gud-def gud-break "b %l" "\C-b" "Set breakpoint at current line.")
52586
a0055e15e603 (perldb): Add gud-until to list of commands.
Nick Roberts <nickrob@snap.net.nz>
parents: 52524
diff changeset
1534 (gud-def gud-remove "B %l" "\C-d" "Remove breakpoint at current line")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1535 (gud-def gud-step "s" "\C-s" "Step one source line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1536 (gud-def gud-next "n" "\C-n" "Step one line (skip functions).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1537 (gud-def gud-cont "c" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1538 ; (gud-def gud-finish "finish" "\C-f" "Finish executing current function.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1539 ; (gud-def gud-up "up %p" "<" "Up N stack frames (numeric arg).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1540 ; (gud-def gud-down "down %p" ">" "Down N stack frames (numeric arg).")
52524
84470539e96f (perldb): Change gud-print from just "%e" to "p %e" to
Nick Roberts <nickrob@snap.net.nz>
parents: 52511
diff changeset
1541 (gud-def gud-print "p %e" "\C-p" "Evaluate perl expression at point.")
52586
a0055e15e603 (perldb): Add gud-until to list of commands.
Nick Roberts <nickrob@snap.net.nz>
parents: 52524
diff changeset
1542 (gud-def gud-until "c %l" "\C-u" "Continue to current line.")
a0055e15e603 (perldb): Add gud-until to list of commands.
Nick Roberts <nickrob@snap.net.nz>
parents: 52524
diff changeset
1543
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1544
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1545 (setq comint-prompt-regexp "^ DB<+[0-9]+>+ ")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1546 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1547 (run-hooks 'perldb-mode-hook))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1548
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1549 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1550 ;; pdb (Python debugger) functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1551
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1552 ;; History of argument lists passed to pdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1553 (defvar gud-pdb-history nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1554
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1555 ;; Last group is for return value, e.g. "> test.py(2)foo()->None"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1556 ;; Either file or function name may be omitted: "> <string>(0)?()"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1557 (defvar gud-pdb-marker-regexp
76166
5b3f284c883e (gud, gud-menu-map): Remove references to bash/bashdb.
Nick Roberts <nickrob@snap.net.nz>
parents: 75756
diff changeset
1558 "^> \\([-a-zA-Z0-9_/.:\\]*\\|<string>\\)(\\([0-9]+\\))\\([a-zA-Z0-9_]*\\|\\?\\|<module>\\)()\\(->[^\n]*\\)?\n")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1559 (defvar gud-pdb-marker-regexp-file-group 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1560 (defvar gud-pdb-marker-regexp-line-group 2)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1561 (defvar gud-pdb-marker-regexp-fnname-group 3)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1562
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1563 (defvar gud-pdb-marker-regexp-start "^> ")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1564
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1565 ;; There's no guarantee that Emacs will hand the filter the entire
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1566 ;; marker at once; it could be broken up across several strings. We
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1567 ;; might even receive a big chunk with several markers in it. If we
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1568 ;; receive a chunk of text which looks like it might contain the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1569 ;; beginning of a marker, we save it here between calls to the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1570 ;; filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1571 (defun gud-pdb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1572 (setq gud-marker-acc (concat gud-marker-acc string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1573 (let ((output ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1574
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1575 ;; Process all the complete markers in this chunk.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1576 (while (string-match gud-pdb-marker-regexp gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1577 (setq
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1578
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1579 ;; Extract the frame position from the marker.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1580 gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1581 (let ((file (match-string gud-pdb-marker-regexp-file-group
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1582 gud-marker-acc))
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
1583 (line (string-to-number
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1584 (match-string gud-pdb-marker-regexp-line-group
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1585 gud-marker-acc))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1586 (if (string-equal file "<string>")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1587 gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1588 (cons file line)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1589
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1590 ;; Output everything instead of the below
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1591 output (concat output (substring gud-marker-acc 0 (match-end 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1592 ;; ;; Append any text before the marker to the output we're going
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1593 ;; ;; to return - we don't include the marker in this text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1594 ;; output (concat output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1595 ;; (substring gud-marker-acc 0 (match-beginning 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1596
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1597 ;; Set the accumulator to the remaining text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1598 gud-marker-acc (substring gud-marker-acc (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1599
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1600 ;; Does the remaining text look like it might end with the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1601 ;; beginning of another marker? If it does, then keep it in
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
1602 ;; gud-marker-acc until we receive the rest of it. Since we
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1603 ;; know the full marker regexp above failed, it's pretty simple to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1604 ;; test for marker starts.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1605 (if (string-match gud-pdb-marker-regexp-start gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1606 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1607 ;; Everything before the potential marker start can be output.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1608 (setq output (concat output (substring gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1609 0 (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1610
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1611 ;; Everything after, we save, to combine with later input.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1612 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1613 (substring gud-marker-acc (match-beginning 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1614
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1615 (setq output (concat output gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1616 gud-marker-acc ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1617
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1618 output))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1619
61484
cf57400d9ae5 (gud-display-line): GUD uses its own
Nick Roberts <nickrob@snap.net.nz>
parents: 61114
diff changeset
1620 (defcustom gud-pdb-command-name "pdb"
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1621 "File name for executing the Python debugger.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1622 This should be an executable on your path, or an absolute file name."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1623 :type 'string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1624 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1625
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1626 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1627 (defun pdb (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1628 "Run pdb on program FILE in buffer `*gud-FILE*'.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1629 The directory containing FILE becomes the initial working directory
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1630 and source-file directory for your debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1631 (interactive
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1632 (list (gud-query-cmdline 'pdb)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1633
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1634 (gud-common-init command-line nil 'gud-pdb-marker-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1635 (set (make-local-variable 'gud-minor-mode) 'pdb)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1636
78948
c7f20962ec6a (pdb): Specify file for gud-break.
Nick Roberts <nickrob@snap.net.nz>
parents: 78945
diff changeset
1637 (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1638 (gud-def gud-remove "clear %f:%l" "\C-d" "Remove breakpoint at current line")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1639 (gud-def gud-step "step" "\C-s" "Step one source line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1640 (gud-def gud-next "next" "\C-n" "Step one line (skip functions).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1641 (gud-def gud-cont "continue" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1642 (gud-def gud-finish "return" "\C-f" "Finish executing current function.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1643 (gud-def gud-up "up" "<" "Up one stack frame.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1644 (gud-def gud-down "down" ">" "Down one stack frame.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1645 (gud-def gud-print "p %e" "\C-p" "Evaluate Python expression at point.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1646 ;; Is this right?
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1647 (gud-def gud-statement "! %e" "\C-e" "Execute Python statement at point.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1648
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1649 ;; (setq comint-prompt-regexp "^(.*pdb[+]?) *")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1650 (setq comint-prompt-regexp "^(Pdb) *")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1651 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1652 (run-hooks 'pdb-mode-hook))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1653
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1654 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1655 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1656 ;; JDB support.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1657 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1658 ;; AUTHOR: Derek Davies <ddavies@world.std.com>
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1659 ;; Zoltan Kemenczy <zoltan@ieee.org;zkemenczy@rim.net>
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1660 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1661 ;; CREATED: Sun Feb 22 10:46:38 1998 Derek Davies.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1662 ;; UPDATED: Nov 11, 2001 Zoltan Kemenczy
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1663 ;; Dec 10, 2002 Zoltan Kemenczy - added nested class support
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1664 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1665 ;; INVOCATION NOTES:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1666 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1667 ;; You invoke jdb-mode with:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1668 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1669 ;; M-x jdb <enter>
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1670 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1671 ;; It responds with:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1672 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1673 ;; Run jdb (like this): jdb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1674 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1675 ;; type any jdb switches followed by the name of the class you'd like to debug.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1676 ;; Supply a fully qualfied classname (these do not have the ".class" extension)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1677 ;; for the name of the class to debug (e.g. "COM.the-kind.ddavies.CoolClass").
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1678 ;; See the known problems section below for restrictions when specifying jdb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1679 ;; command line switches (search forward for '-classpath').
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1680 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1681 ;; You should see something like the following:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1682 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1683 ;; Current directory is ~/src/java/hello/
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1684 ;; Initializing jdb...
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1685 ;; 0xed2f6628:class(hello)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1686 ;; >
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1687 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1688 ;; To set an initial breakpoint try:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1689 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1690 ;; > stop in hello.main
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1691 ;; Breakpoint set in hello.main
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1692 ;; >
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1693 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1694 ;; To execute the program type:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1695 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1696 ;; > run
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1697 ;; run hello
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1698 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1699 ;; Breakpoint hit: running ...
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1700 ;; hello.main (hello:12)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1701 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1702 ;; Type M-n to step over the current line and M-s to step into it. That,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1703 ;; along with the JDB 'help' command should get you started. The 'quit'
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1704 ;; JDB command will get out out of the debugger. There is some truly
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1705 ;; pathetic JDB documentation available at:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1706 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1707 ;; http://java.sun.com/products/jdk/1.1/debugging/
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1708 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1709 ;; KNOWN PROBLEMS AND FIXME's:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1710 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1711 ;; Not sure what happens with inner classes ... haven't tried them.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1712 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1713 ;; Does not grok UNICODE id's. Only ASCII id's are supported.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1714 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1715 ;; You must not put whitespace between "-classpath" and the path to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1716 ;; search for java classes even though it is required when invoking jdb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1717 ;; from the command line. See gud-jdb-massage-args for details.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1718 ;; The same applies for "-sourcepath".
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1719 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1720 ;; Note: The following applies only if `gud-jdb-use-classpath' is nil;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1721 ;; refer to the documentation of `gud-jdb-use-classpath' and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1722 ;; `gud-jdb-classpath',`gud-jdb-sourcepath' variables for information
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1723 ;; on using the classpath for locating java source files.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1724 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1725 ;; If any of the source files in the directories listed in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1726 ;; gud-jdb-directories won't parse you'll have problems. Make sure
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1727 ;; every file ending in ".java" in these directories parses without error.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1728 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1729 ;; All the .java files in the directories in gud-jdb-directories are
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1730 ;; syntactically analyzed each time gud jdb is invoked. It would be
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1731 ;; nice to keep as much information as possible between runs. It would
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1732 ;; be really nice to analyze the files only as neccessary (when the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1733 ;; source needs to be displayed.) I'm not sure to what extent the former
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1734 ;; can be accomplished and I'm not sure the latter can be done at all
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1735 ;; since I don't know of any general way to tell which .class files are
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1736 ;; defined by which .java file without analyzing all the .java files.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1737 ;; If anyone knows why JavaSoft didn't put the source file names in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1738 ;; debuggable .class files please clue me in so I find something else
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1739 ;; to be spiteful and bitter about.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1740 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1741 ;; ======================================================================
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1742 ;; gud jdb variables and functions
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1743
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1744 (defcustom gud-jdb-command-name "jdb"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1745 "Command that executes the Java debugger."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1746 :type 'string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1747 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1748
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1749 (defcustom gud-jdb-use-classpath t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1750 "If non-nil, search for Java source files in classpath directories.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1751 The list of directories to search is the value of `gud-jdb-classpath'.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1752 The file pathname is obtained by converting the fully qualified
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1753 class information output by jdb to a relative pathname and appending
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1754 it to `gud-jdb-classpath' element by element until a match is found.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1755
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1756 This method has a significant jdb startup time reduction advantage
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1757 since it does not require the scanning of all `gud-jdb-directories'
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1758 and parsing all Java files for class information.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1759
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1760 Set to nil to use `gud-jdb-directories' to scan java sources for
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1761 class information on jdb startup (original method)."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1762 :type 'boolean
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1763 :group 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1764
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1765 (defvar gud-jdb-classpath nil
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1766 "Java/jdb classpath directories list.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1767 If `gud-jdb-use-classpath' is non-nil, gud-jdb derives the `gud-jdb-classpath'
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1768 list automatically using the following methods in sequence
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1769 \(with subsequent successful steps overriding the results of previous
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1770 steps):
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1771
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1772 1) Read the CLASSPATH environment variable,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1773 2) Read any \"-classpath\" argument used to run jdb,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1774 or detected in jdb output (e.g. if jdb is run by a script
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1775 that echoes the actual jdb command before starting jdb),
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1776 3) Send a \"classpath\" command to jdb and scan jdb output for
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1777 classpath information if jdb is invoked with an \"-attach\" (to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1778 an already running VM) argument (This case typically does not
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1779 have a \"-classpath\" command line argument - that is provided
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1780 to the VM when it is started).
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1781
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1782 Note that method 3 cannot be used with oldjdb (or Java 1 jdb) since
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1783 those debuggers do not support the classpath command. Use 1) or 2).")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1784
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1785 (defvar gud-jdb-sourcepath nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1786 "Directory list provided by an (optional) \"-sourcepath\" option to jdb.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1787 This list is prepended to `gud-jdb-classpath' to form the complete
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1788 list of directories searched for source files.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1789
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1790 (defvar gud-marker-acc-max-length 4000
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1791 "Maximum number of debugger output characters to keep.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1792 This variable limits the size of `gud-marker-acc' which holds
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1793 the most recent debugger output history while searching for
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1794 source file information.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1795
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1796 (defvar gud-jdb-history nil
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1797 "History of argument lists passed to jdb.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1798
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1799
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1800 ;; List of Java source file directories.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1801 (defvar gud-jdb-directories (list ".")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1802 "*A list of directories that gud jdb should search for source code.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1803 The file names should be absolute, or relative to the current
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1804 directory.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1805
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1806 The set of .java files residing in the directories listed are
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1807 syntactically analyzed to determine the classes they define and the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1808 packages in which these classes belong. In this way gud jdb maps the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1809 package-qualified class names output by the jdb debugger to the source
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1810 file from which the class originated. This allows gud mode to keep
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1811 the source code display in sync with the debugging session.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1812
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1813 (defvar gud-jdb-source-files nil
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1814 "List of the java source files for this debugging session.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1815
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1816 ;; Association list of fully qualified class names (package + class name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1817 ;; and their source files.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1818 (defvar gud-jdb-class-source-alist nil
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1819 "Association list of fully qualified class names and source files.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1820
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1821 ;; This is used to hold a source file during analysis.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1822 (defvar gud-jdb-analysis-buffer nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1823
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1824 (defvar gud-jdb-classpath-string nil
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1825 "Holds temporary classpath values.")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1826
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1827 (defun gud-jdb-build-source-files-list (path extn)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
1828 "Return a list of java source files (absolute paths).
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1829 PATH gives the directories in which to search for files with
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1830 extension EXTN. Normally EXTN is given as the regular expression
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1831 \"\\.java$\" ."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1832 (apply 'nconc (mapcar (lambda (d)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1833 (when (file-directory-p d)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1834 (directory-files d t extn nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1835 path)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1836
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1837 ;; Move point past whitespace.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1838 (defun gud-jdb-skip-whitespace ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1839 (skip-chars-forward " \n\r\t\014"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1840
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1841 ;; Move point past a "// <eol>" type of comment.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1842 (defun gud-jdb-skip-single-line-comment ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1843 (end-of-line))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1844
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1845 ;; Move point past a "/* */" or "/** */" type of comment.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1846 (defun gud-jdb-skip-traditional-or-documentation-comment ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1847 (forward-char 2)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1848 (catch 'break
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1849 (while (not (eobp))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1850 (if (eq (following-char) ?*)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1851 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1852 (forward-char)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1853 (if (not (eobp))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1854 (if (eq (following-char) ?/)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1855 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1856 (forward-char)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1857 (throw 'break nil)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1858 (forward-char)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1859
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1860 ;; Move point past any number of consecutive whitespace chars and/or comments.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1861 (defun gud-jdb-skip-whitespace-and-comments ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1862 (gud-jdb-skip-whitespace)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1863 (catch 'done
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1864 (while t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1865 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1866 ((looking-at "//")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1867 (gud-jdb-skip-single-line-comment)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1868 (gud-jdb-skip-whitespace))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1869 ((looking-at "/\\*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1870 (gud-jdb-skip-traditional-or-documentation-comment)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1871 (gud-jdb-skip-whitespace))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1872 (t (throw 'done nil))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1873
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1874 ;; Move point past things that are id-like. The intent is to skip regular
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1875 ;; id's, such as class or interface names as well as package and interface
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1876 ;; names.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1877 (defun gud-jdb-skip-id-ish-thing ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1878 (skip-chars-forward "^ /\n\r\t\014,;{"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1879
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1880 ;; Move point past a string literal.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1881 (defun gud-jdb-skip-string-literal ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1882 (forward-char)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1883 (while (not (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1884 ((eq (following-char) ?\\)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1885 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1886 ((eq (following-char) ?\042))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1887 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1888 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1889
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1890 ;; Move point past a character literal.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1891 (defun gud-jdb-skip-character-literal ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1892 (forward-char)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1893 (while
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1894 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1895 (if (eq (following-char) ?\\)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1896 (forward-char 2))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1897 (not (eq (following-char) ?\')))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1898 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1899 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1900
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
1901 ;; Move point past the following block. There may be (legal) cruft before
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1902 ;; the block's opening brace. There must be a block or it's the end of life
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1903 ;; in petticoat junction.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1904 (defun gud-jdb-skip-block ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1905
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1906 ;; Find the begining of the block.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1907 (while
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1908 (not (eq (following-char) ?{))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1909
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1910 ;; Skip any constructs that can harbor literal block delimiter
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1911 ;; characters and/or the delimiters for the constructs themselves.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1912 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1913 ((looking-at "//")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1914 (gud-jdb-skip-single-line-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1915 ((looking-at "/\\*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1916 (gud-jdb-skip-traditional-or-documentation-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1917 ((eq (following-char) ?\042)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1918 (gud-jdb-skip-string-literal))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1919 ((eq (following-char) ?\')
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1920 (gud-jdb-skip-character-literal))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1921 (t (forward-char))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1922
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1923 ;; Now at the begining of the block.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1924 (forward-char)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1925
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1926 ;; Skip over the body of the block as well as the final brace.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1927 (let ((open-level 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1928 (while (not (eq open-level 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1929 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1930 ((looking-at "//")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1931 (gud-jdb-skip-single-line-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1932 ((looking-at "/\\*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1933 (gud-jdb-skip-traditional-or-documentation-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1934 ((eq (following-char) ?\042)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1935 (gud-jdb-skip-string-literal))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1936 ((eq (following-char) ?\')
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1937 (gud-jdb-skip-character-literal))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1938 ((eq (following-char) ?{)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1939 (setq open-level (+ open-level 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1940 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1941 ((eq (following-char) ?})
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1942 (setq open-level (- open-level 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1943 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1944 (t (forward-char))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1945
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1946 ;; Find the package and class definitions in Java source file FILE. Assumes
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1947 ;; that FILE contains a legal Java program. BUF is a scratch buffer used
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1948 ;; to hold the source during analysis.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1949 (defun gud-jdb-analyze-source (buf file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1950 (let ((l nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1951 (set-buffer buf)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1952 (insert-file-contents file nil nil nil t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1953 (goto-char 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1954 (catch 'abort
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1955 (let ((p ""))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1956 (while (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1957 (gud-jdb-skip-whitespace)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1958 (not (eobp)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1959 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1960
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1961 ;; Any number of semi's following a block is legal. Move point
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1962 ;; past them. Note that comments and whitespace may be
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1963 ;; interspersed as well.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1964 ((eq (following-char) ?\073)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1965 (forward-char))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1966
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1967 ;; Move point past a single line comment.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1968 ((looking-at "//")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1969 (gud-jdb-skip-single-line-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1970
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1971 ;; Move point past a traditional or documentation comment.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1972 ((looking-at "/\\*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1973 (gud-jdb-skip-traditional-or-documentation-comment))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1974
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1975 ;; Move point past a package statement, but save the PackageName.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1976 ((looking-at "package")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1977 (forward-char 7)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1978 (gud-jdb-skip-whitespace-and-comments)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1979 (let ((s (point)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1980 (gud-jdb-skip-id-ish-thing)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1981 (setq p (concat (buffer-substring s (point)) "."))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1982 (gud-jdb-skip-whitespace-and-comments)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1983 (if (eq (following-char) ?\073)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1984 (forward-char))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1985
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1986 ;; Move point past an import statement.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1987 ((looking-at "import")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1988 (forward-char 6)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1989 (gud-jdb-skip-whitespace-and-comments)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1990 (gud-jdb-skip-id-ish-thing)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1991 (gud-jdb-skip-whitespace-and-comments)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1992 (if (eq (following-char) ?\073)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1993 (forward-char)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1994
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1995 ;; Move point past the various kinds of ClassModifiers.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1996 ((looking-at "public")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1997 (forward-char 6))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1998 ((looking-at "abstract")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
1999 (forward-char 8))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2000 ((looking-at "final")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2001 (forward-char 5))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2002
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2003 ;; Move point past a ClassDeclaraction, but save the class
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2004 ;; Identifier.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2005 ((looking-at "class")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2006 (forward-char 5)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2007 (gud-jdb-skip-whitespace-and-comments)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2008 (let ((s (point)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2009 (gud-jdb-skip-id-ish-thing)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2010 (setq
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2011 l (nconc l (list (concat p (buffer-substring s (point)))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2012 (gud-jdb-skip-block))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2013
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2014 ;; Move point past an interface statement.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2015 ((looking-at "interface")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2016 (forward-char 9)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2017 (gud-jdb-skip-block))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2018
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2019 ;; Anything else means the input is invalid.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2020 (t
65584
6dbba0bd58df Message format fixes, commit no. 3
Deepak Goel <deego@gnufans.org>
parents: 65233
diff changeset
2021 (message "Error parsing file %s." file)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2022 (throw 'abort nil))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2023 l))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2024
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2025 (defun gud-jdb-build-class-source-alist-for-file (file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2026 (mapcar
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2027 (lambda (c)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2028 (cons c file))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2029 (gud-jdb-analyze-source gud-jdb-analysis-buffer file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2030
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2031 ;; Return an alist of fully qualified classes and the source files
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2032 ;; holding their definitions. SOURCES holds a list of all the source
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2033 ;; files to examine.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2034 (defun gud-jdb-build-class-source-alist (sources)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2035 (setq gud-jdb-analysis-buffer (get-buffer-create " *gud-jdb-scratch*"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2036 (prog1
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2037 (apply
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2038 'nconc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2039 (mapcar
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2040 'gud-jdb-build-class-source-alist-for-file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2041 sources))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2042 (kill-buffer gud-jdb-analysis-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2043 (setq gud-jdb-analysis-buffer nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2044
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2045 ;; Change what was given in the minibuffer to something that can be used to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2046 ;; invoke the debugger.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2047 (defun gud-jdb-massage-args (file args)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2048 ;; The jdb executable must have whitespace between "-classpath" and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2049 ;; its value while gud-common-init expects all switch values to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2050 ;; follow the switch keyword without intervening whitespace. We
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2051 ;; require that when the user enters the "-classpath" switch in the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2052 ;; EMACS minibuffer that they do so without the intervening
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2053 ;; whitespace. This function adds it back (it's called after
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2054 ;; gud-common-init). There are more switches like this (for
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2055 ;; instance "-host" and "-password") but I don't care about them
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2056 ;; yet.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2057 (if args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2058 (let (massaged-args user-error)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2059
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2060 (while (and args (not user-error))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2061 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2062 ((setq user-error (string-match "-classpath$" (car args))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2063 ((setq user-error (string-match "-sourcepath$" (car args))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2064 ((string-match "-classpath\\(.+\\)" (car args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2065 (setq massaged-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2066 (append massaged-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2067 (list "-classpath"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2068 (setq gud-jdb-classpath-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2069 (match-string 1 (car args)))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2070 ((string-match "-sourcepath\\(.+\\)" (car args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2071 (setq massaged-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2072 (append massaged-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2073 (list "-sourcepath"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2074 (setq gud-jdb-sourcepath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2075 (match-string 1 (car args)))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2076 (t (setq massaged-args (append massaged-args (list (car args))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2077 (setq args (cdr args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2078
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2079 ;; By this point the current directory is all screwed up. Maybe we
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2080 ;; could fix things and re-invoke gud-common-init, but for now I think
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2081 ;; issueing the error is good enough.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2082 (if user-error
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2083 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2084 (kill-buffer (current-buffer))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2085 (error "Error: Omit whitespace between '-classpath or -sourcepath' and its value")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2086 massaged-args)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2087
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2088 ;; Search for an association with P, a fully qualified class name, in
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
2089 ;; gud-jdb-class-source-alist. The asssociation gives the fully
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2090 ;; qualified file name of the source file which produced the class.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2091 (defun gud-jdb-find-source-file (p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2092 (cdr (assoc p gud-jdb-class-source-alist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2093
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2094 ;; Note: Reset to this value every time a prompt is seen
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2095 (defvar gud-jdb-lowest-stack-level 999)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2096
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2097 (defun gud-jdb-find-source-using-classpath (p)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2098 "Find source file corresponding to fully qualified class P.
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2099 Convert P from jdb's output, converted to a pathname
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2100 relative to a classpath directory."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2101 (save-match-data
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2102 (let
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2103 (;; Replace dots with slashes and append ".java" to generate file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2104 ;; name relative to classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2105 (filename
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2106 (concat
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2107 (mapconcat 'identity
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2108 (split-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2109 ;; Eliminate any subclass references in the class
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2110 ;; name string. These start with a "$"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2111 ((lambda (x)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2112 (if (string-match "$.*" x)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2113 (replace-match "" t t x) p))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2114 p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2115 "\\.") "/")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2116 ".java"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2117 (cplist (append gud-jdb-sourcepath gud-jdb-classpath))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2118 found-file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2119 (while (and cplist
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2120 (not (setq found-file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2121 (file-readable-p
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2122 (concat (car cplist) "/" filename)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2123 (setq cplist (cdr cplist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2124 (if found-file (concat (car cplist) "/" filename)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2125
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2126 (defun gud-jdb-find-source (string)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2127 "Alias for function used to locate source files.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2128 Set to `gud-jdb-find-source-using-classpath' or `gud-jdb-find-source-file'
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2129 during jdb initialization depending on the value of
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2130 `gud-jdb-use-classpath'."
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2131 nil)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2132
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2133 (defun gud-jdb-parse-classpath-string (string)
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2134 "Parse the classpath list and convert each item to an absolute pathname."
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2135 (mapcar (lambda (s) (if (string-match "[/\\]$" s)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2136 (replace-match "" nil nil s) s))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2137 (mapcar 'file-truename
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2138 (split-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2139 string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2140 (concat "[ \t\n\r,\"" path-separator "]+")))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2141
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2142 ;; See comentary for other debugger's marker filters - there you will find
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2143 ;; important notes about STRING.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2144 (defun gud-jdb-marker-filter (string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2145
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2146 ;; Build up the accumulator.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2147 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2148 (if gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2149 (concat gud-marker-acc string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2150 string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2151
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2152 ;; Look for classpath information until gud-jdb-classpath-string is found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2153 ;; (interactive, multiple settings of classpath from jdb
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2154 ;; not supported/followed)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2155 (if (and gud-jdb-use-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2156 (not gud-jdb-classpath-string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2157 (or (string-match "classpath:[ \t[]+\\([^]]+\\)" gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2158 (string-match "-classpath[ \t\"]+\\([^ \"]+\\)" gud-marker-acc)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2159 (setq gud-jdb-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2160 (gud-jdb-parse-classpath-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2161 (setq gud-jdb-classpath-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2162 (match-string 1 gud-marker-acc)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2163
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2164 ;; We process STRING from left to right. Each time through the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2165 ;; following loop we process at most one marker. After we've found a
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2166 ;; marker, delete gud-marker-acc up to and including the match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2167 (let (file-found)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2168 ;; Process each complete marker in the input.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2169 (while
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2170
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2171 ;; Do we see a marker?
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2172 (string-match
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2173 ;; jdb puts out a string of the following form when it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2174 ;; hits a breakpoint:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2175 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2176 ;; <fully-qualified-class><method> (<class>:<line-number>)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2177 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2178 ;; <fully-qualified-class>'s are composed of Java ID's
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2179 ;; separated by periods. <method> and <class> are
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2180 ;; also Java ID's. <method> begins with a period and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2181 ;; may contain less-than and greater-than (constructors,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2182 ;; for instance, are called <init> in the symbol table.)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2183 ;; Java ID's begin with a letter followed by letters
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2184 ;; and/or digits. The set of letters includes underscore
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2185 ;; and dollar sign.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2186 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2187 ;; The first group matches <fully-qualified-class>,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2188 ;; the second group matches <class> and the third group
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2189 ;; matches <line-number>. We don't care about using
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2190 ;; <method> so we don't "group" it.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2191 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2192 ;; FIXME: Java ID's are UNICODE strings, this matches ASCII
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2193 ;; ID's only.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2194 ;;
53850
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2195 ;; The ".," in the last square-bracket are necessary because
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2196 ;; of Sun's total disrespect for backwards compatibility in
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2197 ;; reported line numbers from jdb - starting in 1.4.0 they
53850
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2198 ;; print line numbers using LOCALE, inserting a comma or a
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2199 ;; period at the thousands positions (how ingenious!).
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2200
69291
928466fb1966 (gud-jdb-marker-filter): Double quote `[' in regexp for Lisp syntax.
Luc Teirlinck <teirllm@auburn.edu>
parents: 69233
diff changeset
2201 "\\(\\[[0-9]+] \\)*\\([a-zA-Z0-9.$_]+\\)\\.[a-zA-Z0-9$_<>(),]+ \
53850
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2202 \\(([a-zA-Z0-9.$_]+:\\|line=\\)\\([0-9.,]+\\)"
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2203 gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2204
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2205 ;; A good marker is one that:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2206 ;; 1) does not have a "[n] " prefix (not part of a stack backtrace)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2207 ;; 2) does have an "[n] " prefix and n is the lowest prefix seen
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2208 ;; since the last prompt
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2209 ;; Figure out the line on which to position the debugging arrow.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2210 ;; Return the info as a cons of the form:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2211 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2212 ;; (<file-name> . <line-number>) .
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2213 (if (if (match-beginning 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2214 (let (n)
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
2215 (setq n (string-to-number (substring
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2216 gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2217 (1+ (match-beginning 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2218 (- (match-end 1) 2))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2219 (if (< n gud-jdb-lowest-stack-level)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2220 (progn (setq gud-jdb-lowest-stack-level n) t)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2221 t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2222 (if (setq file-found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2223 (gud-jdb-find-source (match-string 2 gud-marker-acc)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2224 (setq gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2225 (cons file-found
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
2226 (string-to-number
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2227 (let
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2228 ((numstr (match-string 4 gud-marker-acc)))
53850
d19a78b5f1e5 (gud-jdb-marker-filter): Add period as optional thousands separator; fixes
Nick Roberts <nickrob@snap.net.nz>
parents: 53536
diff changeset
2229 (if (string-match "[.,]" numstr)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2230 (replace-match "" nil nil numstr)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2231 numstr)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2232 (message "Could not find source file.")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2233
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2234 ;; Set the accumulator to the remaining text.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2235 (setq gud-marker-acc (substring gud-marker-acc (match-end 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2236
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2237 (if (string-match comint-prompt-regexp gud-marker-acc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2238 (setq gud-jdb-lowest-stack-level 999)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2239
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2240 ;; Do not allow gud-marker-acc to grow without bound. If the source
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2241 ;; file information is not within the last 3/4
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2242 ;; gud-marker-acc-max-length characters, well,...
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2243 (if (> (length gud-marker-acc) gud-marker-acc-max-length)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2244 (setq gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2245 (substring gud-marker-acc
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2246 (- (/ (* gud-marker-acc-max-length 3) 4)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2247
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2248 ;; We don't filter any debugger output so just return what we were given.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2249 string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2250
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2251 (defvar gud-jdb-command-name "jdb" "Command that executes the Java debugger.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2252
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2253 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2254 (defun jdb (command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2255 "Run jdb with command line COMMAND-LINE in a buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2256 The buffer is named \"*gud*\" if no initial class is given or
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
2257 \"*gud-<initial-class-basename>*\" if there is. If the \"-classpath\"
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2258 switch is given, omit all whitespace between it and its value.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2259
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2260 See `gud-jdb-use-classpath' and `gud-jdb-classpath' documentation for
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
2261 information on how jdb accesses source files. Alternatively (if
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2262 `gud-jdb-use-classpath' is nil), see `gud-jdb-directories' for the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2263 original source file access method.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2264
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2265 For general information about commands available to control jdb from
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2266 gud, see `gud-mode'."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2267 (interactive
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2268 (list (gud-query-cmdline 'jdb)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2269 (setq gud-jdb-classpath nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2270 (setq gud-jdb-sourcepath nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2271
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2272 ;; Set gud-jdb-classpath from the CLASSPATH environment variable,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2273 ;; if CLASSPATH is set.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2274 (setq gud-jdb-classpath-string (getenv "CLASSPATH"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2275 (if gud-jdb-classpath-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2276 (setq gud-jdb-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2277 (gud-jdb-parse-classpath-string gud-jdb-classpath-string)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2278 (setq gud-jdb-classpath-string nil) ; prepare for next
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2279
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2280 (gud-common-init command-line 'gud-jdb-massage-args
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2281 'gud-jdb-marker-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2282 (set (make-local-variable 'gud-minor-mode) 'jdb)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2283
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2284 ;; If a -classpath option was provided, set gud-jdb-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2285 (if gud-jdb-classpath-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2286 (setq gud-jdb-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2287 (gud-jdb-parse-classpath-string gud-jdb-classpath-string)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2288 (setq gud-jdb-classpath-string nil) ; prepare for next
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2289 ;; If a -sourcepath option was provided, parse it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2290 (if gud-jdb-sourcepath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2291 (setq gud-jdb-sourcepath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2292 (gud-jdb-parse-classpath-string gud-jdb-sourcepath)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2293
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2294 (gud-def gud-break "stop at %c:%l" "\C-b" "Set breakpoint at current line.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2295 (gud-def gud-remove "clear %c:%l" "\C-d" "Remove breakpoint at current line")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2296 (gud-def gud-step "step" "\C-s" "Step one source line with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2297 (gud-def gud-next "next" "\C-n" "Step one line (skip functions).")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2298 (gud-def gud-cont "cont" "\C-r" "Continue with display.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2299 (gud-def gud-finish "step up" "\C-f" "Continue until current method returns.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2300 (gud-def gud-up "up\C-Mwhere" "<" "Up one stack frame.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2301 (gud-def gud-down "down\C-Mwhere" ">" "Up one stack frame.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2302 (gud-def gud-run "run" nil "Run the program.") ;if VM start using jdb
77147
15f6e5a53aff (jdb): Add gud-print.
Nick Roberts <nickrob@snap.net.nz>
parents: 77144
diff changeset
2303 (gud-def gud-print "print %e" "\C-p" "Evaluate Java expression at point.")
15f6e5a53aff (jdb): Add gud-print.
Nick Roberts <nickrob@snap.net.nz>
parents: 77144
diff changeset
2304
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2305 (setq comint-prompt-regexp "^> \\|^[^ ]+\\[[0-9]+\\] ")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2306 (setq paragraph-start comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2307 (run-hooks 'jdb-mode-hook)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2308
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2309 (if gud-jdb-use-classpath
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2310 ;; Get the classpath information from the debugger
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2311 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2312 (if (string-match "-attach" command-line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2313 (gud-call "classpath"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2314 (fset 'gud-jdb-find-source
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2315 'gud-jdb-find-source-using-classpath))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2316
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2317 ;; Else create and bind the class/source association list as well
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2318 ;; as the source file list.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2319 (setq gud-jdb-class-source-alist
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2320 (gud-jdb-build-class-source-alist
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2321 (setq gud-jdb-source-files
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2322 (gud-jdb-build-source-files-list gud-jdb-directories
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2323 "\\.java$"))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2324 (fset 'gud-jdb-find-source 'gud-jdb-find-source-file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2325
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2326 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2327 ;; End of debugger-specific information
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2328 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2329
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2330
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2331 ;; When we send a command to the debugger via gud-call, it's annoying
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2332 ;; to see the command and the new prompt inserted into the debugger's
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2333 ;; buffer; we have other ways of knowing the command has completed.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2334 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2335 ;; If the buffer looks like this:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2336 ;; --------------------
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2337 ;; (gdb) set args foo bar
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2338 ;; (gdb) -!-
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2339 ;; --------------------
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2340 ;; (the -!- marks the location of point), and we type `C-x SPC' in a
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2341 ;; source file to set a breakpoint, we want the buffer to end up like
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2342 ;; this:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2343 ;; --------------------
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2344 ;; (gdb) set args foo bar
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2345 ;; Breakpoint 1 at 0x92: file make-docfile.c, line 49.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2346 ;; (gdb) -!-
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2347 ;; --------------------
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2348 ;; Essentially, the old prompt is deleted, and the command's output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2349 ;; and the new prompt take its place.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2350 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2351 ;; Not echoing the command is easy enough; you send it directly using
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2352 ;; process-send-string, and it never enters the buffer. However,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2353 ;; getting rid of the old prompt is trickier; you don't want to do it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2354 ;; when you send the command, since that will result in an annoying
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2355 ;; flicker as the prompt is deleted, redisplay occurs while Emacs
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2356 ;; waits for a response from the debugger, and the new prompt is
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2357 ;; inserted. Instead, we'll wait until we actually get some output
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2358 ;; from the subprocess before we delete the prompt. If the command
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2359 ;; produced no output other than a new prompt, that prompt will most
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2360 ;; likely be in the first chunk of output received, so we will delete
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2361 ;; the prompt and then replace it with an identical one. If the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2362 ;; command produces output, the prompt is moving anyway, so the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2363 ;; flicker won't be annoying.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2364 ;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2365 ;; So - when we want to delete the prompt upon receipt of the next
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2366 ;; chunk of debugger output, we position gud-delete-prompt-marker at
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2367 ;; the start of the prompt; the process filter will notice this, and
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2368 ;; delete all text between it and the process output marker. If
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2369 ;; gud-delete-prompt-marker points nowhere, we leave the current
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2370 ;; prompt alone.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2371 (defvar gud-delete-prompt-marker nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2372
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2373
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2374 (put 'gud-mode 'mode-class 'special)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2375
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2376 (define-derived-mode gud-mode comint-mode "Debugger"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2377 "Major mode for interacting with an inferior debugger process.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2378
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2379 You start it up with one of the commands M-x gdb, M-x sdb, M-x dbx,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2380 M-x perldb, M-x xdb, or M-x jdb. Each entry point finishes by executing a
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2381 hook; `gdb-mode-hook', `sdb-mode-hook', `dbx-mode-hook',
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2382 `perldb-mode-hook', `xdb-mode-hook', or `jdb-mode-hook' respectively.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2383
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2384 After startup, the following commands are available in both the GUD
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2385 interaction buffer and any source buffer GUD visits due to a breakpoint stop
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2386 or step operation:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2387
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2388 \\[gud-break] sets a breakpoint at the current file and line. In the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2389 GUD buffer, the current file and line are those of the last breakpoint or
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2390 step. In a source buffer, they are the buffer's file and current line.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2391
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2392 \\[gud-remove] removes breakpoints on the current file and line.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2393
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2394 \\[gud-refresh] displays in the source window the last line referred to
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2395 in the gud buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2396
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2397 \\[gud-step], \\[gud-next], and \\[gud-stepi] do a step-one-line,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2398 step-one-line (not entering function calls), and step-one-instruction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2399 and then update the source window with the current file and position.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2400 \\[gud-cont] continues execution.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2401
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2402 \\[gud-print] tries to find the largest C lvalue or function-call expression
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2403 around point, and sends it to the debugger for value display.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2404
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2405 The above commands are common to all supported debuggers except xdb which
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2406 does not support stepping instructions.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2407
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2408 Under gdb, sdb and xdb, \\[gud-tbreak] behaves exactly like \\[gud-break],
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2409 except that the breakpoint is temporary; that is, it is removed when
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2410 execution stops on it.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2411
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2412 Under gdb, dbx, and xdb, \\[gud-up] pops up through an enclosing stack
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2413 frame. \\[gud-down] drops back down through one.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2414
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2415 If you are using gdb or xdb, \\[gud-finish] runs execution to the return from
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2416 the current function and stops.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2417
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2418 All the keystrokes above are accessible in the GUD buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2419 with the prefix C-c, and in all buffers through the prefix C-x C-a.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2420
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2421 All pre-defined functions for which the concept make sense repeat
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2422 themselves the appropriate number of times if you give a prefix
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2423 argument.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2424
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2425 You may use the `gud-def' macro in the initialization hook to define other
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2426 commands.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2427
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2428 Other commands for interacting with the debugger process are inherited from
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2429 comint mode, which see."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2430 (setq mode-line-process '(":%s"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2431 (define-key (current-local-map) "\C-c\C-l" 'gud-refresh)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2432 (set (make-local-variable 'gud-last-frame) nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2433 (set (make-local-variable 'tool-bar-map) gud-tool-bar-map)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2434 (make-local-variable 'comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2435 ;; Don't put repeated commands in command history many times.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2436 (set (make-local-variable 'comint-input-ignoredups) t)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2437 (make-local-variable 'paragraph-start)
55558
0ac980237ad3 (gud-mode): Add gud-kill-buffer-hook to kill-buffer-hook here and make it local.
Nick Roberts <nickrob@snap.net.nz>
parents: 55483
diff changeset
2438 (set (make-local-variable 'gud-delete-prompt-marker) (make-marker))
0ac980237ad3 (gud-mode): Add gud-kill-buffer-hook to kill-buffer-hook here and make it local.
Nick Roberts <nickrob@snap.net.nz>
parents: 55483
diff changeset
2439 (add-hook 'kill-buffer-hook 'gud-kill-buffer-hook nil t))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2440
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2441 ;; Cause our buffers to be displayed, by default,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2442 ;; in the selected window.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2443 ;;;###autoload (add-hook 'same-window-regexps "\\*gud-.*\\*\\(\\|<[0-9]+>\\)")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2444
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2445 (defcustom gud-chdir-before-run t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2446 "Non-nil if GUD should `cd' to the debugged executable."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2447 :group 'gud
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2448 :type 'boolean)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2449
97715
dac49f77b3b3 (tramp-file-name-localname, tramp-dissect-file-name): Declare,
Glenn Morris <rgm@gnu.org>
parents: 97641
diff changeset
2450 (declare-function tramp-file-name-localname "tramp" (vec))
dac49f77b3b3 (tramp-file-name-localname, tramp-dissect-file-name): Declare,
Glenn Morris <rgm@gnu.org>
parents: 97641
diff changeset
2451 (declare-function tramp-dissect-file-name "tramp" (name &optional nodefault))
dac49f77b3b3 (tramp-file-name-localname, tramp-dissect-file-name): Declare,
Glenn Morris <rgm@gnu.org>
parents: 97641
diff changeset
2452
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2453 ;; Perform initializations common to all debuggers.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2454 ;; The first arg is the specified command line,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2455 ;; which starts with the program to debug.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2456 ;; The other three args specify the values to use
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2457 ;; for local variables in the debugger buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2458 (defun gud-common-init (command-line massage-args marker-filter
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2459 &optional find-file)
78533
8bf8256b3ffa (gud-common-init): Use new name split-string-and-unquote.
Richard M. Stallman <rms@gnu.org>
parents: 78487
diff changeset
2460 (let* ((words (split-string-and-unquote command-line))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2461 (program (car words))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2462 (dir default-directory)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2463 ;; Extract the file name from WORDS
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2464 ;; and put t in its place.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2465 ;; Later on we will put the modified file name arg back there.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2466 (file-word (let ((w (cdr words)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2467 (while (and w (= ?- (aref (car w) 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2468 (setq w (cdr w)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2469 (and w
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2470 (prog1 (car w)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2471 (setcar w t)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2472 (file-subst
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2473 (and file-word (substitute-in-file-name file-word)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2474 (args (cdr words))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2475 ;; If a directory was specified, expand the file name.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2476 ;; Otherwise, don't expand it, so GDB can use the PATH.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2477 ;; A file name without directory is literally valid
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2478 ;; only if the file exists in ., and in that case,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2479 ;; omitting the expansion here has no visible effect.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2480 (file (and file-word
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2481 (if (file-name-directory file-subst)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2482 (expand-file-name file-subst)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2483 file-subst)))
55216
1014ad951130 (gud-common-init): Throw an error if program is
Nick Roberts <nickrob@snap.net.nz>
parents: 55149
diff changeset
2484 (filepart (and file-word (concat "-" (file-name-nondirectory file))))
1014ad951130 (gud-common-init): Throw an error if program is
Nick Roberts <nickrob@snap.net.nz>
parents: 55149
diff changeset
2485 (existing-buffer (get-buffer (concat "*gud" filepart "*"))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2486 (pop-to-buffer (concat "*gud" filepart "*"))
55483
bb2dcb7fd983 Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296
Miles Bader <miles@gnu.org>
parents: 55216
diff changeset
2487 (when (and existing-buffer (get-buffer-process existing-buffer))
71221
07cd76eb8e03 (gud-menu-map): Use a conditional help echo for gud-go.
Nick Roberts <nickrob@snap.net.nz>
parents: 71102
diff changeset
2488 (error "This program is already being debugged"))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2489 ;; Set the dir, in case the buffer already existed with a different dir.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2490 (setq default-directory dir)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2491 ;; Set default-directory to the file's directory.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2492 (and file-word
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2493 gud-chdir-before-run
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2494 ;; Don't set default-directory if no directory was specified.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2495 ;; In that case, either the file is found in the current directory,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2496 ;; in which case this setq is a no-op,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2497 ;; or it is found by searching PATH,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2498 ;; in which case we don't know what directory it was found in.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2499 (file-name-directory file)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2500 (setq default-directory (file-name-directory file)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2501 (or (bolp) (newline))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2502 (insert "Current directory is " default-directory "\n")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2503 ;; Put the substituted and expanded file name back in its place.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2504 (let ((w args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2505 (while (and w (not (eq (car w) t)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2506 (setq w (cdr w)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2507 (if w
81816
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
2508 (setcar w
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
2509 (if (file-remote-p default-directory)
97641
7f22f71742f0 (gud-common-init): Use absolute file so that
Nick Roberts <nickrob@snap.net.nz>
parents: 96515
diff changeset
2510 ;; Tramp has already been loaded if we are here.
7f22f71742f0 (gud-common-init): Use absolute file so that
Nick Roberts <nickrob@snap.net.nz>
parents: 96515
diff changeset
2511 (setq file (tramp-file-name-localname
7f22f71742f0 (gud-common-init): Use absolute file so that
Nick Roberts <nickrob@snap.net.nz>
parents: 96515
diff changeset
2512 (tramp-dissect-file-name file)))
81816
8c1a05c2d668 * progmodes/compile.el (compilation-start): `start-process' must
Michael Albinus <michael.albinus@gmx.de>
parents: 81778
diff changeset
2513 file))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2514 (apply 'make-comint (concat "gud" filepart) program nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2515 (if massage-args (funcall massage-args file args) args))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2516 ;; Since comint clobbered the mode, we don't set it until now.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2517 (gud-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2518 (set (make-local-variable 'gud-target-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2519 (and file-word (file-name-nondirectory file))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2520 (set (make-local-variable 'gud-marker-filter) marker-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2521 (if find-file (set (make-local-variable 'gud-find-file) find-file))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2522 (setq gud-last-last-frame nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2523
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2524 (set-process-filter (get-buffer-process (current-buffer)) 'gud-filter)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2525 (set-process-sentinel (get-buffer-process (current-buffer)) 'gud-sentinel)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2526 (gud-set-buffer))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2527
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2528 (defun gud-set-buffer ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2529 (when (eq major-mode 'gud-mode)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2530 (setq gud-comint-buffer (current-buffer))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2531
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2532 (defvar gud-filter-defer-flag nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2533 "Non-nil means don't process anything from the debugger right now.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2534 It is saved for when this flag is not set.")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2535
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2536 ;; These functions are responsible for inserting output from your debugger
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2537 ;; into the buffer. The hard work is done by the method that is
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2538 ;; the value of gud-marker-filter.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2539
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2540 (defun gud-filter (proc string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2541 ;; Here's where the actual buffer insertion is done
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2542 (let (output process-window)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2543 (if (buffer-name (process-buffer proc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2544 (if gud-filter-defer-flag
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2545 ;; If we can't process any text now,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2546 ;; save it for later.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2547 (setq gud-filter-pending-text
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2548 (concat (or gud-filter-pending-text "") string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2549
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2550 ;; If we have to ask a question during the processing,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2551 ;; defer any additional text that comes from the debugger
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2552 ;; during that time.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2553 (let ((gud-filter-defer-flag t))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2554 ;; Process now any text we previously saved up.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2555 (if gud-filter-pending-text
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2556 (setq string (concat gud-filter-pending-text string)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2557 gud-filter-pending-text nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2558
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2559 (with-current-buffer (process-buffer proc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2560 ;; If we have been so requested, delete the debugger prompt.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2561 (save-restriction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2562 (widen)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2563 (if (marker-buffer gud-delete-prompt-marker)
66381
99d33f0ea507 (gud-filter): Bind inhibit-read-only to t
Nick Roberts <nickrob@snap.net.nz>
parents: 66175
diff changeset
2564 (let ((inhibit-read-only t))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2565 (delete-region (process-mark proc)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2566 gud-delete-prompt-marker)
66578
ed2aec2424ae (gud-filter): Use comint-update-fence to delete
Nick Roberts <nickrob@snap.net.nz>
parents: 66457
diff changeset
2567 (comint-update-fence)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2568 (set-marker gud-delete-prompt-marker nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2569 ;; Save the process output, checking for source file markers.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2570 (setq output (gud-marker-filter string))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2571 ;; Check for a filename-and-line number.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2572 ;; Don't display the specified file
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2573 ;; unless (1) point is at or after the position where output appears
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2574 ;; and (2) this buffer is on the screen.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2575 (setq process-window
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2576 (and gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2577 (>= (point) (process-mark proc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2578 (get-buffer-window (current-buffer)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2579
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2580 ;; Let the comint filter do the actual insertion.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2581 ;; That lets us inherit various comint features.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2582 (comint-output-filter proc output))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2583
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2584 ;; Put the arrow on the source line.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2585 ;; This must be outside of the save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2586 ;; in case the source file is our current buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2587 (if process-window
63789
ac833c86f212 (gud-filter): Add missing argument to
Nick Roberts <nickrob@snap.net.nz>
parents: 63758
diff changeset
2588 (with-selected-window process-window
63887
396252178c2c (gud-filter): Remove unneeded progn.
Andreas Schwab <schwab@suse.de>
parents: 63789
diff changeset
2589 (gud-display-frame))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2590 ;; We have to be in the proper buffer, (process-buffer proc),
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2591 ;; but not in a save-excursion, because that would restore point.
63758
b0c4ce512db4 (gud-filter): Simplify using with-selected-window and with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 63731
diff changeset
2592 (with-current-buffer (process-buffer proc)
b0c4ce512db4 (gud-filter): Simplify using with-selected-window and with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 63731
diff changeset
2593 (gud-display-frame))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2594
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2595 ;; If we deferred text that arrived during this processing,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2596 ;; handle it now.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2597 (if gud-filter-pending-text
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2598 (gud-filter proc ""))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2599
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2600 (defvar gud-minor-mode-type nil)
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2601 (defvar gud-overlay-arrow-position nil)
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2602 (add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2603
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2604 (declare-function gdb-reset "gdb-ui" ())
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2605
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2606 (defun gud-sentinel (proc msg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2607 (cond ((null (buffer-name (process-buffer proc)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2608 ;; buffer killed
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2609 ;; Stop displaying an arrow in a source file.
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2610 (setq gud-overlay-arrow-position nil)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2611 (set-process-buffer proc nil)
66105
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
2612 (if (and (boundp 'speedbar-frame)
59812faf9041 (gud-tool-bar-map): Rename the images
Nick Roberts <nickrob@snap.net.nz>
parents: 66094
diff changeset
2613 (string-equal speedbar-initial-expansion-list-name "GUD"))
65972
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
2614 (speedbar-change-initial-expansion-list
8bd4c2112a50 (gud-install-speedbar-variables): Add more
Nick Roberts <nickrob@snap.net.nz>
parents: 65953
diff changeset
2615 speedbar-previously-used-expansion-list-name))
55750
3a482d346abb (gud-menu-map, gud-speedbar-menu-items)
Nick Roberts <nickrob@snap.net.nz>
parents: 55697
diff changeset
2616 (if (memq gud-minor-mode-type '(gdbmi gdba))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2617 (gdb-reset)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2618 (gud-reset)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2619 ((memq (process-status proc) '(signal exit))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2620 ;; Stop displaying an arrow in a source file.
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2621 (setq gud-overlay-arrow-position nil)
70878
8740ce7e1367 (gud-sentinel): Condition on GUD buffer if it has not been killed.
Nick Roberts <nickrob@snap.net.nz>
parents: 70768
diff changeset
2622 (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
8740ce7e1367 (gud-sentinel): Condition on GUD buffer if it has not been killed.
Nick Roberts <nickrob@snap.net.nz>
parents: 70768
diff changeset
2623 '(gdba gdbmi))
8740ce7e1367 (gud-sentinel): Condition on GUD buffer if it has not been killed.
Nick Roberts <nickrob@snap.net.nz>
parents: 70768
diff changeset
2624 (gdb-reset)
8740ce7e1367 (gud-sentinel): Condition on GUD buffer if it has not been killed.
Nick Roberts <nickrob@snap.net.nz>
parents: 70768
diff changeset
2625 (gud-reset))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2626 (let* ((obuf (current-buffer)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2627 ;; save-excursion isn't the right thing if
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2628 ;; process-buffer is current-buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2629 (unwind-protect
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2630 (progn
78931
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2631 ;; Write something in the GUD buffer and hack its mode line,
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2632 (set-buffer (process-buffer proc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2633 ;; Fix the mode line.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2634 (setq mode-line-process
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2635 (concat ":"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2636 (symbol-name (process-status proc))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2637 (force-mode-line-update)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2638 (if (eobp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2639 (insert ?\n mode-name " " msg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2640 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2641 (goto-char (point-max))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2642 (insert ?\n mode-name " " msg)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2643 ;; If buffer and mode line will show that the process
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2644 ;; is dead, we can delete it now. Otherwise it
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2645 ;; will stay around until M-x list-processes.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2646 (delete-process proc))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2647 ;; Restore old buffer, but don't restore old point
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2648 ;; if obuf is the gud buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2649 (set-buffer obuf))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2650
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2651 (defun gud-kill-buffer-hook ()
55558
0ac980237ad3 (gud-mode): Add gud-kill-buffer-hook to kill-buffer-hook here and make it local.
Nick Roberts <nickrob@snap.net.nz>
parents: 55483
diff changeset
2652 (setq gud-minor-mode-type gud-minor-mode)
0ac980237ad3 (gud-mode): Add gud-kill-buffer-hook to kill-buffer-hook here and make it local.
Nick Roberts <nickrob@snap.net.nz>
parents: 55483
diff changeset
2653 (condition-case nil
65044
96450052ed77 (gud-kill-buffer-hook): Don't kill unrelated
Andreas Schwab <schwab@suse.de>
parents: 64998
diff changeset
2654 (kill-process (get-buffer-process (current-buffer)))
55558
0ac980237ad3 (gud-mode): Add gud-kill-buffer-hook to kill-buffer-hook here and make it local.
Nick Roberts <nickrob@snap.net.nz>
parents: 55483
diff changeset
2655 (error nil)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2656
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2657 (defun gud-reset ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2658 (dolist (buffer (buffer-list))
55697
83b3b9e4e001 (gud-reset): Use unless & with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55558
diff changeset
2659 (unless (eq buffer gud-comint-buffer)
83b3b9e4e001 (gud-reset): Use unless & with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55558
diff changeset
2660 (with-current-buffer buffer
83b3b9e4e001 (gud-reset): Use unless & with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55558
diff changeset
2661 (when gud-minor-mode
83b3b9e4e001 (gud-reset): Use unless & with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55558
diff changeset
2662 (setq gud-minor-mode nil)
83b3b9e4e001 (gud-reset): Use unless & with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55558
diff changeset
2663 (kill-local-variable 'tool-bar-map))))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2664
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2665 (defun gud-display-frame ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2666 "Find and obey the last filename-and-line marker from the debugger.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2667 Obeying it means displaying in another window the specified file and line."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2668 (interactive)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2669 (when gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2670 (gud-set-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2671 (gud-display-line (car gud-last-frame) (cdr gud-last-frame))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2672 (setq gud-last-last-frame gud-last-frame
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2673 gud-last-frame nil)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2674
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2675 (declare-function global-hl-line-highlight "hl-line" ())
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2676 (declare-function hl-line-highlight "hl-line" ())
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2677 (declare-function gdb-display-source-buffer "gdb-ui" (buffer))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2678 (declare-function gdb-display-buffer "gdb-ui" (buf dedicated &optional size))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
2679
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2680 ;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2681 ;; and that its line LINE is visible.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2682 ;; Put the overlay-arrow on the line LINE in that buffer.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2683 ;; Most of the trickiness in here comes from wanting to preserve the current
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2684 ;; region-restriction if that's possible. We use an explicit display-buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2685 ;; to get around the fact that this is called inside a save-excursion.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2686
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2687 (defun gud-display-line (true-file line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2688 (let* ((last-nonmenu-event t) ; Prevent use of dialog box for questions.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2689 (buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2690 (with-current-buffer gud-comint-buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2691 (gud-find-file true-file)))
78931
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2692 (window (and buffer
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2693 (or (get-buffer-window buffer)
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2694 (if (memq gud-minor-mode '(gdbmi gdba))
94446
24da79778167 (gud-display-line): Only consider visible
Nick Roberts <nickrob@snap.net.nz>
parents: 94293
diff changeset
2695 (or (if (get-buffer-window buffer 'visible)
24da79778167 (gud-display-line): Only consider visible
Nick Roberts <nickrob@snap.net.nz>
parents: 94293
diff changeset
2696 (display-buffer buffer nil 'visible))
78931
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2697 (unless (gdb-display-source-buffer buffer)
94446
24da79778167 (gud-display-line): Only consider visible
Nick Roberts <nickrob@snap.net.nz>
parents: 94293
diff changeset
2698 (gdb-display-buffer buffer nil 'visible))))
78931
4c662e5e1263 (gud-display-line): Find source buffer even when
Nick Roberts <nickrob@snap.net.nz>
parents: 78768
diff changeset
2699 (display-buffer buffer))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2700 (pos))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2701 (if buffer
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2702 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2703 (with-current-buffer buffer
52329
06717a26a254 (gud-display-line): Don't set window-point if
Nick Roberts <nickrob@snap.net.nz>
parents: 52058
diff changeset
2704 (unless (or (verify-visited-file-modtime buffer) gud-keep-buffer)
06717a26a254 (gud-display-line): Don't set window-point if
Nick Roberts <nickrob@snap.net.nz>
parents: 52058
diff changeset
2705 (if (yes-or-no-p
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2706 (format "File %s changed on disk. Reread from disk? "
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2707 (buffer-name)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2708 (revert-buffer t t)
52329
06717a26a254 (gud-display-line): Don't set window-point if
Nick Roberts <nickrob@snap.net.nz>
parents: 52058
diff changeset
2709 (setq gud-keep-buffer t)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2710 (save-restriction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2711 (widen)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2712 (goto-line line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2713 (setq pos (point))
61114
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2714 (or gud-overlay-arrow-position
e1f821140a5a (gdb): (Re)-initialise gud-filter-pending-text.
Nick Roberts <nickrob@snap.net.nz>
parents: 59862
diff changeset
2715 (setq gud-overlay-arrow-position (make-marker)))
67957
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2716 (set-marker gud-overlay-arrow-position (point) (current-buffer))
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2717 ;; If they turned on hl-line, move the hl-line highlight to
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2718 ;; the arrow's line.
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2719 (when (featurep 'hl-line)
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2720 (cond
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2721 (global-hl-line-mode
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2722 (global-hl-line-highlight))
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2723 ((and hl-line-mode hl-line-sticky-flag)
cbb3942260ab (gud-display-line): Support hl-line in the source buffer.
Eli Zaretskii <eliz@gnu.org>
parents: 67890
diff changeset
2724 (hl-line-highlight)))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2725 (cond ((or (< pos (point-min)) (> pos (point-max)))
52329
06717a26a254 (gud-display-line): Don't set window-point if
Nick Roberts <nickrob@snap.net.nz>
parents: 52058
diff changeset
2726 (widen)
06717a26a254 (gud-display-line): Don't set window-point if
Nick Roberts <nickrob@snap.net.nz>
parents: 52058
diff changeset
2727 (goto-char pos))))
74144
b302d34b7eae (jdb): Fix space/tab mixup in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72650
diff changeset
2728 (when window
71878
30e3082c1a7e (gud-display-line): Use gdb-display-buffer. Set gdb-source-window.
Nick Roberts <nickrob@snap.net.nz>
parents: 71595
diff changeset
2729 (set-window-point window gud-overlay-arrow-position)
30e3082c1a7e (gud-display-line): Use gdb-display-buffer. Set gdb-source-window.
Nick Roberts <nickrob@snap.net.nz>
parents: 71595
diff changeset
2730 (if (memq gud-minor-mode '(gdbmi gdba))
30e3082c1a7e (gud-display-line): Use gdb-display-buffer. Set gdb-source-window.
Nick Roberts <nickrob@snap.net.nz>
parents: 71595
diff changeset
2731 (setq gdb-source-window window)))))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2732
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2733 ;; The gud-call function must do the right thing whether its invoking
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2734 ;; keystroke is from the GUD buffer itself (via major-mode binding)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2735 ;; or a C buffer. In the former case, we want to supply data from
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2736 ;; gud-last-frame. Here's how we do it:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2737
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2738 (defun gud-format-command (str arg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2739 (let ((insource (not (eq (current-buffer) gud-comint-buffer)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2740 (frame (or gud-last-frame gud-last-last-frame))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2741 result)
70295
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
2742 (while (and str
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
2743 (let ((case-fold-search nil))
da2f6762c09a (gud-def): Add %c case.
Nick Roberts <nickrob@snap.net.nz>
parents: 70248
diff changeset
2744 (string-match "\\([^%]*\\)%\\([adefFlpc]\\)" str)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2745 (let ((key (string-to-char (match-string 2 str)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2746 subst)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2747 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2748 ((eq key ?f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2749 (setq subst (file-name-nondirectory (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2750 (buffer-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2751 (car frame)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2752 ((eq key ?F)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2753 (setq subst (file-name-sans-extension
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2754 (file-name-nondirectory (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2755 (buffer-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2756 (car frame))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2757 ((eq key ?d)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2758 (setq subst (file-name-directory (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2759 (buffer-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2760 (car frame)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2761 ((eq key ?l)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2762 (setq subst (int-to-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2763 (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2764 (save-restriction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2765 (widen)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2766 (+ (count-lines (point-min) (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2767 (if (bolp) 1 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2768 (cdr frame)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2769 ((eq key ?e)
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2770 (setq subst (gud-find-expr)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2771 ((eq key ?a)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2772 (setq subst (gud-read-address)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2773 ((eq key ?c)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2774 (setq subst
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2775 (gud-find-class
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2776 (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2777 (buffer-file-name)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2778 (car frame))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2779 (if insource
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2780 (save-restriction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2781 (widen)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2782 (+ (count-lines (point-min) (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2783 (if (bolp) 1 0)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2784 (cdr frame)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2785 ((eq key ?p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2786 (setq subst (if arg (int-to-string arg)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2787 (setq result (concat result (match-string 1 str) subst)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2788 (setq str (substring str (match-end 2))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2789 ;; There might be text left in STR when the loop ends.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2790 (concat result str)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2791
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2792 (defun gud-read-address ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2793 "Return a string containing the core-address found in the buffer at point."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2794 (save-match-data
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2795 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2796 (let ((pt (point)) found begin)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2797 (setq found (if (search-backward "0x" (- pt 7) t) (point)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2798 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2799 (found (forward-char 2)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2800 (buffer-substring found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2801 (progn (re-search-forward "[^0-9a-f]")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2802 (forward-char -1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2803 (point))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2804 (t (setq begin (progn (re-search-backward "[^0-9]")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2805 (forward-char 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2806 (point)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2807 (forward-char 1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2808 (re-search-forward "[^0-9]")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2809 (forward-char -1)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2810 (buffer-substring begin (point))))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2811
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2812 (defun gud-call (fmt &optional arg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2813 (let ((msg (gud-format-command fmt arg)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2814 (message "Command: %s" msg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2815 (sit-for 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2816 (gud-basic-call msg)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2817
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2818 (defun gud-basic-call (command)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2819 "Invoke the debugger COMMAND displaying source in other window."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2820 (interactive)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2821 (gud-set-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2822 (let ((proc (get-buffer-process gud-comint-buffer)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2823 (or proc (error "Current buffer has no process"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2824 ;; Arrange for the current prompt to get deleted.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2825 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2826 (set-buffer gud-comint-buffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2827 (save-restriction
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2828 (widen)
70248
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2829 (if (marker-position gud-delete-prompt-marker)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2830 ;; We get here when printing an expression.
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2831 (goto-char gud-delete-prompt-marker)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2832 (goto-char (process-mark proc))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2833 (forward-line 0))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2834 (if (looking-at comint-prompt-regexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2835 (set-marker gud-delete-prompt-marker (point)))
55750
3a482d346abb (gud-menu-map, gud-speedbar-menu-items)
Nick Roberts <nickrob@snap.net.nz>
parents: 55697
diff changeset
2836 (if (memq gud-minor-mode '(gdbmi gdba))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2837 (apply comint-input-sender (list proc command))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2838 (process-send-string proc (concat command "\n")))))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2839
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2840 (defun gud-refresh (&optional arg)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2841 "Fix up a possibly garbled display, and redraw the arrow."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2842 (interactive "P")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2843 (or gud-last-frame (setq gud-last-frame gud-last-last-frame))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2844 (gud-display-frame)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2845 (recenter arg))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2846
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2847 ;; Code for parsing expressions out of C or Fortran code. The single entry
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2848 ;; point is gud-find-expr, which tries to return an lvalue expression from
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2849 ;; around point.
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2850
51619
16b79b135bf5 (gud-find-expr-function): Rename from gud-find-expr.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51616
diff changeset
2851 (defvar gud-find-expr-function 'gud-find-c-expr)
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2852
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2853 (defun gud-find-expr (&rest args)
70248
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2854 (let ((expr (if (and transient-mark-mode mark-active)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2855 (buffer-substring (region-beginning) (region-end))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2856 (apply gud-find-expr-function args))))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2857 (save-match-data
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2858 (if (string-match "\n" expr)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2859 (error "Expression must not include a newline"))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2860 (with-current-buffer gud-comint-buffer
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2861 (save-excursion
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2862 (goto-char (process-mark (get-buffer-process gud-comint-buffer)))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2863 (forward-line 0)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2864 (when (looking-at comint-prompt-regexp)
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2865 (set-marker gud-delete-prompt-marker (point))
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2866 (set-marker-insertion-type gud-delete-prompt-marker t))
77147
15f6e5a53aff (jdb): Add gud-print.
Nick Roberts <nickrob@snap.net.nz>
parents: 77144
diff changeset
2867 (unless (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
15f6e5a53aff (jdb): Add gud-print.
Nick Roberts <nickrob@snap.net.nz>
parents: 77144
diff changeset
2868 'jdb)
91868
46a8e4f391fb (gud-gdb): Don't reset gdb-ready.
Nick Roberts <nickrob@snap.net.nz>
parents: 87649
diff changeset
2869 (insert (concat expr " = "))))))
70248
4fc61ee2deb2 (gud-comint-buffer): Move forward to stop byte compiler warnings.
Nick Roberts <nickrob@snap.net.nz>
parents: 70054
diff changeset
2870 expr))
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2871
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2872 ;; The next eight functions are hacked from gdbsrc.el by
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2873 ;; Debby Ayers <ayers@asc.slb.com>,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2874 ;; Rich Schaefer <schaefer@asc.slb.com> Schlumberger, Austin, Tx.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2875
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2876 (defun gud-find-c-expr ()
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2877 "Returns the expr that surrounds point."
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2878 (interactive)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2879 (save-excursion
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2880 (let ((p (point))
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2881 (expr (gud-innermost-expr))
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
2882 (test-expr (gud-prev-expr)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2883 (while (and test-expr (gud-expr-compound test-expr expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2884 (let ((prev-expr expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2885 (setq expr (cons (car test-expr) (cdr expr)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2886 (goto-char (car expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2887 (setq test-expr (gud-prev-expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2888 ;; If we just pasted on the condition of an if or while,
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2889 ;; throw it away again.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2890 (if (member (buffer-substring (car test-expr) (cdr test-expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2891 '("if" "while" "for"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2892 (setq test-expr nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2893 expr prev-expr))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2894 (goto-char p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2895 (setq test-expr (gud-next-expr))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2896 (while (gud-expr-compound expr test-expr)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2897 (setq expr (cons (car expr) (cdr test-expr)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2898 (setq test-expr (gud-next-expr)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2899 (buffer-substring (car expr) (cdr expr)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2900
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2901 (defun gud-innermost-expr ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2902 "Returns the smallest expr that point is in; move point to beginning of it.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2903 The expr is represented as a cons cell, where the car specifies the point in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2904 the current buffer that marks the beginning of the expr and the cdr specifies
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2905 the character after the end of the expr."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2906 (let ((p (point)) begin end)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2907 (gud-backward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2908 (setq begin (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2909 (gud-forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2910 (setq end (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2911 (if (>= p end)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2912 (progn
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2913 (setq begin p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2914 (goto-char p)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2915 (gud-forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2916 (setq end (point)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2917 )
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2918 (goto-char begin)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2919 (cons begin end)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2920
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2921 (defun gud-backward-sexp ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2922 "Version of `backward-sexp' that catches errors."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2923 (condition-case nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2924 (backward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2925 (error t)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2926
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2927 (defun gud-forward-sexp ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2928 "Version of `forward-sexp' that catches errors."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2929 (condition-case nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2930 (forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2931 (error t)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2932
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2933 (defun gud-prev-expr ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2934 "Returns the previous expr, point is set to beginning of that expr.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2935 The expr is represented as a cons cell, where the car specifies the point in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2936 the current buffer that marks the beginning of the expr and the cdr specifies
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2937 the character after the end of the expr"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2938 (let ((begin) (end))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2939 (gud-backward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2940 (setq begin (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2941 (gud-forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2942 (setq end (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2943 (goto-char begin)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2944 (cons begin end)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2945
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2946 (defun gud-next-expr ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2947 "Returns the following expr, point is set to beginning of that expr.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2948 The expr is represented as a cons cell, where the car specifies the point in
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2949 the current buffer that marks the beginning of the expr and the cdr specifies
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2950 the character after the end of the expr."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2951 (let ((begin) (end))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2952 (gud-forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2953 (gud-forward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2954 (setq end (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2955 (gud-backward-sexp)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2956 (setq begin (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2957 (cons begin end)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2958
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2959 (defun gud-expr-compound-sep (span-start span-end)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2960 "Scan from SPAN-START to SPAN-END for punctuation characters.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2961 If `->' is found, return `?.'. If `.' is found, return `?.'.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2962 If any other punctuation is found, return `??'.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2963 If no punctuation is found, return `? '."
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
2964 (let ((result ?\s)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2965 (syntax))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2966 (while (< span-start span-end)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2967 (setq syntax (char-syntax (char-after span-start)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2968 (cond
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
2969 ((= syntax ?\s) t)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2970 ((= syntax ?.) (setq syntax (char-after span-start))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2971 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2972 ((= syntax ?.) (setq result ?.))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2973 ((and (= syntax ?-) (= (char-after (+ span-start 1)) ?>))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2974 (setq result ?.)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2975 (setq span-start (+ span-start 1)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2976 (t (setq span-start span-end)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2977 (setq result ??)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2978 (setq span-start (+ span-start 1)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2979 result))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2980
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2981 (defun gud-expr-compound (first second)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2982 "Non-nil if concatenating FIRST and SECOND makes a single C expression.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2983 The two exprs are represented as a cons cells, where the car
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2984 specifies the point in the current buffer that marks the beginning of the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2985 expr and the cdr specifies the character after the end of the expr.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2986 Link exprs of the form:
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2987 Expr -> Expr
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2988 Expr . Expr
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2989 Expr (Expr)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2990 Expr [Expr]
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2991 (Expr) Expr
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2992 [Expr] Expr"
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2993 (let ((span-start (cdr first))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2994 (span-end (car second))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2995 (syntax))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2996 (setq syntax (gud-expr-compound-sep span-start span-end))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2997 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2998 ((= (car first) (car second)) nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
2999 ((= (cdr first) (cdr second)) nil)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3000 ((= syntax ?.) t)
65233
88dc4b03facf (gdb-active-process, gdb-define-alist, gdb-macro-info, gdb-server-prefix,
Juanma Barranquero <lekktu@gmail.com>
parents: 65044
diff changeset
3001 ((= syntax ?\s)
51616
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3002 (setq span-start (char-after (- span-start 1)))
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3003 (setq span-end (char-after span-end))
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3004 (cond
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3005 ((= span-start ?)) t)
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3006 ((= span-start ?]) t)
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3007 ((= span-end ?() t)
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3008 ((= span-end ?[) t)
25262b54af10 (gud-menu-map): Add dbx support for "run" and
Nick Roberts <nickrob@snap.net.nz>
parents: 51494
diff changeset
3009 (t nil)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3010 (t nil))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3011
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3012
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3013 (declare-function c-langelem-sym "cc-defs" (langelem))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3014 (declare-function c-langelem-pos "cc-defs" (langelem))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3015 (declare-function syntax-symbol "gud" (x))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3016 (declare-function syntax-point "gud" (x))
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3017
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3018 (defun gud-find-class (f line)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3019 "Find fully qualified class in file F at line LINE.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3020 This function uses the `gud-jdb-classpath' (and optional
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3021 `gud-jdb-sourcepath') list(s) to derive a file
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
3022 pathname relative to its classpath directory. The values in
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3023 `gud-jdb-classpath' are assumed to have been converted to absolute
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3024 pathname standards using file-truename.
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3025 If F is visited by a buffer and its mode is CC-mode(Java),
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3026 syntactic information of LINE is used to find the enclosing (nested)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3027 class string which is appended to the top level
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3028 class of the file (using s to separate nested class ids)."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3029 ;; Convert f to a standard representation and remove suffix
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3030 (if (and gud-jdb-use-classpath (or gud-jdb-classpath gud-jdb-sourcepath))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3031 (save-match-data
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3032 (let ((cplist (append gud-jdb-sourcepath gud-jdb-classpath))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3033 (fbuffer (get-file-buffer f))
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3034 syntax-symbol syntax-point class-found)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3035 (setq f (file-name-sans-extension (file-truename f)))
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3036 ;; Syntax-symbol returns the symbol of the *first* element
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3037 ;; in the syntactical analysis result list, syntax-point
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3038 ;; returns the buffer position of same
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3039 (fset 'syntax-symbol (lambda (x) (c-langelem-sym (car x))))
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3040 (fset 'syntax-point (lambda (x) (c-langelem-pos (car x))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3041 ;; Search through classpath list for an entry that is
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3042 ;; contained in f
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3043 (while (and cplist (not class-found))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3044 (if (string-match (car cplist) f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3045 (setq class-found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3046 (mapconcat 'identity
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3047 (split-string
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3048 (substring f (+ (match-end 0) 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3049 "/") ".")))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3050 (setq cplist (cdr cplist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3051 ;; if f is visited by a java(cc-mode) buffer, walk up the
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3052 ;; syntactic information chain and collect any 'inclass
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3053 ;; symbols until 'topmost-intro is reached to find out if
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3054 ;; point is within a nested class
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3055 (if (and fbuffer (equal (symbol-file 'java-mode) "cc-mode"))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3056 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3057 (set-buffer fbuffer)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3058 (let ((nclass) (syntax))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3059 ;; While the c-syntactic information does not start
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3060 ;; with the 'topmost-intro symbol, there may be
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3061 ;; nested classes...
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3062 (while (not (eq 'topmost-intro
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3063 (syntax-symbol (c-guess-basic-syntax))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3064 ;; Check if the current position c-syntactic
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3065 ;; analysis has 'inclass
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3066 (setq syntax (c-guess-basic-syntax))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3067 (while
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3068 (and (not (eq 'inclass (syntax-symbol syntax)))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3069 (cdr syntax))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3070 (setq syntax (cdr syntax)))
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3071 (if (eq 'inclass (syntax-symbol syntax))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3072 (progn
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3073 (goto-char (syntax-point syntax))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3074 ;; Now we're at the beginning of a class
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3075 ;; definition. Find class name
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3076 (looking-at
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3077 "[A-Za-z0-9 \t\n]*?class[ \t\n]+\\([^ \t\n]+\\)")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3078 (setq nclass
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3079 (append (list (match-string-no-properties 1))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3080 nclass)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3081 (setq syntax (c-guess-basic-syntax))
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3082 (while (and (not (syntax-point syntax)) (cdr syntax))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3083 (setq syntax (cdr syntax)))
52511
261a321c464e (gud-find-class): Make jdb work again since
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
3084 (goto-char (syntax-point syntax))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3085 ))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3086 (string-match (concat (car nclass) "$") class-found)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3087 (setq class-found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3088 (replace-match (mapconcat 'identity nclass "$")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3089 t t class-found)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3090 (if (not class-found)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3091 (message "gud-find-class: class for file %s not found!" f))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3092 class-found))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3093 ;; Not using classpath - try class/source association list
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3094 (let ((class-found (rassoc f gud-jdb-class-source-alist)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3095 (if class-found
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3096 (car class-found)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3097 (message "gud-find-class: class for file %s not found in gud-jdb-class-source-alist!" f)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3098 nil))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3099
62049
471fca8487d3 Replace string-to-int with string-to-number.
Nick Roberts <nickrob@snap.net.nz>
parents: 61690
diff changeset
3100
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3102 ;;; GDB script mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3103 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3104
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3105 (defvar gdb-script-mode-syntax-table
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3106 (let ((st (make-syntax-table)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3107 (modify-syntax-entry ?' "\"" st)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3108 (modify-syntax-entry ?# "<" st)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3109 (modify-syntax-entry ?\n ">" st)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3110 st))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3111
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3112 (defvar gdb-script-font-lock-keywords
52058
5d60b6e20fbd (gdb-script-font-lock-keywords): Put `font-lock-function-name-face'
Masatake YAMATO <jet@gyve.org>
parents: 51619
diff changeset
3113 '(("^define\\s-+\\(\\(\\w\\|\\s_\\)+\\)" (1 font-lock-function-name-face))
5d60b6e20fbd (gdb-script-font-lock-keywords): Put `font-lock-function-name-face'
Masatake YAMATO <jet@gyve.org>
parents: 51619
diff changeset
3114 ("\\$\\(\\w+\\)" (1 font-lock-variable-name-face))
70768
c3d4f6eacc0f (gdb-script-font-lock-keywords): Use a stricter regexp for keywords.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 70666
diff changeset
3115 ("^\\s-*\\(\\w\\(\\w\\|\\s_\\)*\\)" (1 font-lock-keyword-face))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3116
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3117 (defvar gdb-script-font-lock-syntactic-keywords
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3118 '(("^document\\s-.*\\(\n\\)" (1 "< b"))
72257
93223615e952 (gdb-script-font-lock-syntactic-keywords):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71878
diff changeset
3119 ("^end\\>"
75756
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3120 (0 (unless (eq (match-beginning 0) (point-min))
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3121 ;; We change the \n in front, which is more difficult, but results
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3122 ;; in better highlighting. If the doc is empty, the single \n is
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3123 ;; both the beginning and the end of the docstring, which can't be
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3124 ;; expressed in syntax-tables. Instead, we place the "> b" after
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3125 ;; placing the "< b", so the start marker is overwritten by the
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3126 ;; termination marker and in the end Emacs simply considers that
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3127 ;; there's no docstring at all, which is fine.
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3128 (put-text-property (1- (match-beginning 0)) (match-beginning 0)
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3129 'syntax-table (eval-when-compile
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3130 (string-to-syntax "> b")))
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3131 ;; Make sure that rehighlighting the previous line won't erase our
78962
1e24f865fb6d (gud-gud-gdb-command-name): Fix typo in docstring.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 78958
diff changeset
3132 ;; syntax-table property.
75756
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3133 (put-text-property (1- (match-beginning 0)) (match-end 0)
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3134 'font-lock-multiline t)
97721109e77f (gdb-script-font-lock-syntactic-keywords): Improve comments.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
3135 nil)))))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3136
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3137 (defun gdb-script-font-lock-syntactic-face (state)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3138 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3139 ((nth 3 state) font-lock-string-face)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3140 ((nth 7 state) font-lock-doc-face)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3141 (t font-lock-comment-face)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3142
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3143 (defvar gdb-script-basic-indent 2)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3144
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3145 (defun gdb-script-skip-to-head ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3146 "We're just in front of an `end' and we need to go to its head."
68062
a4e1f58469e5 (gdb-script-skip-to-head, gdb-script-calculate-indentation):
Nick Roberts <nickrob@snap.net.nz>
parents: 67957
diff changeset
3147 (while (and (re-search-backward "^\\s-*\\(\\(end\\)\\|define\\|document\\|if\\|while\\|commands\\)\\>" nil 'move)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3148 (match-end 2))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3149 (gdb-script-skip-to-head)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3150
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3151 (defun gdb-script-calculate-indentation ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3152 (cond
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3153 ((looking-at "end\\>")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3154 (gdb-script-skip-to-head)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3155 (current-indentation))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3156 ((looking-at "else\\>")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3157 (while (and (re-search-backward "^\\s-*\\(if\\|\\(end\\)\\)\\>" nil 'move)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3158 (match-end 2))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3159 (gdb-script-skip-to-head))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3160 (current-indentation))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3161 (t
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3162 (forward-comment (- (point-max)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3163 (forward-line 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3164 (skip-chars-forward " \t")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3165 (+ (current-indentation)
68062
a4e1f58469e5 (gdb-script-skip-to-head, gdb-script-calculate-indentation):
Nick Roberts <nickrob@snap.net.nz>
parents: 67957
diff changeset
3166 (if (looking-at "\\(if\\|while\\|define\\|else\\|commands\\)\\>")
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3167 gdb-script-basic-indent 0)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3168
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3169 (defun gdb-script-indent-line ()
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3170 "Indent current line of GDB script."
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3171 (interactive)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3172 (if (and (eq (get-text-property (point) 'face) font-lock-doc-face)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3173 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3174 (forward-line 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3175 (skip-chars-forward " \t")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3176 (not (looking-at "end\\>"))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3177 'noindent
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3178 (let* ((savep (point))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3179 (indent (condition-case nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3180 (save-excursion
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3181 (forward-line 0)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3182 (skip-chars-forward " \t")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3183 (if (>= (point) savep) (setq savep nil))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3184 (max (gdb-script-calculate-indentation) 0))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3185 (error 0))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3186 (if savep
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3187 (save-excursion (indent-line-to indent))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3188 (indent-line-to indent)))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3189
57476
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3190 ;; Derived from cfengine.el.
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3191 (defun gdb-script-beginning-of-defun ()
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3192 "`beginning-of-defun' function for Gdb script mode.
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3193 Treats actions as defuns."
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3194 (unless (<= (current-column) (current-indentation))
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3195 (end-of-line))
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3196 (if (re-search-backward "^define \\|^document " nil t)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3197 (beginning-of-line)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3198 (goto-char (point-min)))
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3199 t)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3200
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3201 ;; Derived from cfengine.el.
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3202 (defun gdb-script-end-of-defun ()
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3203 "`end-of-defun' function for Gdb script mode.
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3204 Treats actions as defuns."
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3205 (end-of-line)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3206 (if (re-search-forward "^end" nil t)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3207 (beginning-of-line)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3208 (goto-char (point-max)))
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3209 t)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3210
78070
28e125eb9a2a (auto-mode-alist): Match more valid gdb init
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77624
diff changeset
3211 ;; Besides .gdbinit, gdb documents other names to be usable for init
28e125eb9a2a (auto-mode-alist): Match more valid gdb init
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77624
diff changeset
3212 ;; files, cross-debuggers can use something like
28e125eb9a2a (auto-mode-alist): Match more valid gdb init
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77624
diff changeset
3213 ;; .PROCESSORNAME-gdbinit so that the host and target gdbinit files
28e125eb9a2a (auto-mode-alist): Match more valid gdb init
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77624
diff changeset
3214 ;; don't interfere with each other.
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3215 ;;;###autoload
78070
28e125eb9a2a (auto-mode-alist): Match more valid gdb init
Dan Nicolaescu <dann@ics.uci.edu>
parents: 77624
diff changeset
3216 (add-to-list 'auto-mode-alist '("/\\.[a-z0-9-]*gdbinit" . gdb-script-mode))
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3217
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3218 ;;;###autoload
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3219 (define-derived-mode gdb-script-mode nil "GDB-Script"
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
3220 "Major mode for editing GDB scripts."
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3221 (set (make-local-variable 'comment-start) "#")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3222 (set (make-local-variable 'comment-start-skip) "#+\\s-*")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3223 (set (make-local-variable 'outline-regexp) "[ \t]")
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3224 (set (make-local-variable 'imenu-generic-expression)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3225 '((nil "^define[ \t]+\\(\\w+\\)" 1)))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3226 (set (make-local-variable 'indent-line-function) 'gdb-script-indent-line)
57476
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3227 (set (make-local-variable 'beginning-of-defun-function)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3228 #'gdb-script-beginning-of-defun)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3229 (set (make-local-variable 'end-of-defun-function)
6205fd61e464 * progmodes/gud.el (gdb-script-beginning-of-defun): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55750
diff changeset
3230 #'gdb-script-end-of-defun)
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3231 (set (make-local-variable 'font-lock-defaults)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3232 '(gdb-script-font-lock-keywords nil nil ((?_ . "w")) nil
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3233 (font-lock-syntactic-keywords
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3234 . gdb-script-font-lock-syntactic-keywords)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3235 (font-lock-syntactic-face-function
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3236 . gdb-script-font-lock-syntactic-face))))
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3237
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3238
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3239 ;;; tooltips for GUD
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3240
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3241 ;;; Customizable settings
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3242
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3243 (define-minor-mode gud-tooltip-mode
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3244 "Toggle the display of GUD tooltips."
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3245 :global t
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3246 :group 'gud
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3247 :group 'tooltip
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3248 (require 'tooltip)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3249 (if gud-tooltip-mode
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3250 (progn
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3251 (add-hook 'change-major-mode-hook 'gud-tooltip-change-major-mode)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3252 (add-hook 'pre-command-hook 'tooltip-hide)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3253 (add-hook 'tooltip-hook 'gud-tooltip-tips)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3254 (define-key global-map [mouse-movement] 'gud-tooltip-mouse-motion))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3255 (unless tooltip-mode (remove-hook 'pre-command-hook 'tooltip-hide)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3256 (remove-hook 'change-major-mode-hook 'gud-tooltip-change-major-mode)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3257 (remove-hook 'tooltip-hook 'gud-tooltip-tips)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3258 (define-key global-map [mouse-movement] 'ignore)))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3259 (gud-tooltip-activate-mouse-motions-if-enabled)
69527
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
3260 (if (and gud-comint-buffer
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
3261 (buffer-name gud-comint-buffer); gud-comint-buffer might be killed
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
3262 (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
64cdad743e23 (gud-gdb-complete-command, gud-gdb-run-command-fetch-lines): Adapt for use
Nick Roberts <nickrob@snap.net.nz>
parents: 69476
diff changeset
3263 '(gdbmi gdba)))
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3264 (if gud-tooltip-mode
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3265 (progn
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3266 (dolist (buffer (buffer-list))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3267 (unless (eq buffer gud-comint-buffer)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3268 (with-current-buffer buffer
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3269 (when (and (memq gud-minor-mode '(gdbmi gdba))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3270 (not (string-match "\\`\\*.+\\*\\'"
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3271 (buffer-name))))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3272 (make-local-variable 'gdb-define-alist)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3273 (gdb-create-define-alist)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3274 (add-hook 'after-save-hook
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3275 'gdb-create-define-alist nil t))))))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3276 (kill-local-variable 'gdb-define-alist)
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3277 (remove-hook 'after-save-hook 'gdb-create-define-alist t))))
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3278
94024
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3279 (define-obsolete-variable-alias 'tooltip-gud-modes
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3280 'gud-tooltip-modes "22.1")
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3281
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
3282 (defcustom gud-tooltip-modes '(gud-mode c-mode c++-mode fortran-mode
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
3283 python-mode)
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3284 "List of modes for which to enable GUD tooltips."
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3285 :type 'sexp
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3286 :group 'gud
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3287 :group 'tooltip)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3288
94024
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3289 (define-obsolete-variable-alias 'tooltip-gud-display
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3290 'gud-tooltip-display "22.1")
9addbbd02f71 Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
3291
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3292 (defcustom gud-tooltip-display
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3293 '((eq (tooltip-event-buffer gud-tooltip-event)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3294 (marker-buffer gud-overlay-arrow-position)))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3295 "List of forms determining where GUD tooltips are displayed.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3296
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3297 Forms in the list are combined with AND. The default is to display
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3298 only tooltips in the buffer containing the overlay arrow."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3299 :type 'sexp
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3300 :group 'gud
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3301 :group 'tooltip)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3302
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3303 (defcustom gud-tooltip-echo-area nil
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3304 "Use the echo area instead of frames for GUD tooltips."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3305 :type 'boolean
67486
3d94a55776e3 (gud-tooltip-modes, gud-tooltip-display):
Nick Roberts <nickrob@snap.net.nz>
parents: 67403
diff changeset
3306 :group 'gud
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3307 :group 'tooltip)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3308
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3309 ;;; Reacting on mouse movements
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3310
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3311 (defun gud-tooltip-change-major-mode ()
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3312 "Function added to `change-major-mode-hook' when tooltip mode is on."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3313 (add-hook 'post-command-hook 'gud-tooltip-activate-mouse-motions-if-enabled))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3314
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3315 (defun gud-tooltip-activate-mouse-motions-if-enabled ()
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3316 "Reconsider for all buffers whether mouse motion events are desired."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3317 (remove-hook 'post-command-hook
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3318 'gud-tooltip-activate-mouse-motions-if-enabled)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3319 (dolist (buffer (buffer-list))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3320 (save-excursion
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3321 (set-buffer buffer)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3322 (if (and gud-tooltip-mode
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3323 (memq major-mode gud-tooltip-modes))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3324 (gud-tooltip-activate-mouse-motions t)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3325 (gud-tooltip-activate-mouse-motions nil)))))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3326
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3327 (defvar gud-tooltip-mouse-motions-active nil
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3328 "Locally t in a buffer if tooltip processing of mouse motion is enabled.")
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3329
71595
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3330 ;; We don't set track-mouse globally because this is a big redisplay
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3331 ;; problem in buffers having a pre-command-hook or such installed,
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3332 ;; which does a set-buffer, like the summary buffer of Gnus. Calling
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3333 ;; set-buffer prevents redisplay optimizations, so every mouse motion
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3334 ;; would be accompanied by a full redisplay.
1152b12a089e tooltip.el: Move comment about track-mouse...
Nick Roberts <nickrob@snap.net.nz>
parents: 71238
diff changeset
3335
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3336 (defun gud-tooltip-activate-mouse-motions (activatep)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3337 "Activate/deactivate mouse motion events for the current buffer.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3338 ACTIVATEP non-nil means activate mouse motion events."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3339 (if activatep
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3340 (progn
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3341 (make-local-variable 'gud-tooltip-mouse-motions-active)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3342 (setq gud-tooltip-mouse-motions-active t)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3343 (make-local-variable 'track-mouse)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3344 (setq track-mouse t))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3345 (when gud-tooltip-mouse-motions-active
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3346 (kill-local-variable 'gud-tooltip-mouse-motions-active)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3347 (kill-local-variable 'track-mouse))))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3348
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3349 (defvar tooltip-last-mouse-motion-event)
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3350 (declare-function tooltip-hide "tooltip" (&optional ignored-arg))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3351 (declare-function tooltip-start-delayed-tip "tooltip" ())
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3352
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3353 (defun gud-tooltip-mouse-motion (event)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3354 "Command handler for mouse movement events in `global-map'."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3355 (interactive "e")
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3356 (tooltip-hide)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3357 (when (car (mouse-pixel-position))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3358 (setq tooltip-last-mouse-motion-event (copy-sequence event))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3359 (tooltip-start-delayed-tip)))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3360
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3361 ;;; Tips for `gud'
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3362
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3363 (defvar gud-tooltip-original-filter nil
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3364 "Process filter to restore after GUD output has been received.")
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3365
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3366 (defvar gud-tooltip-dereference nil
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3367 "Non-nil means print expressions with a `*' in front of them.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3368 For C this would dereference a pointer expression.")
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3369
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3370 (defvar gud-tooltip-event nil
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3371 "The mouse movement event that led to a tooltip display.
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
3372 This event can be examined by forms in `gud-tooltip-display'.")
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3373
69293
409217fd29ea (gud-tooltip-dereference): Add missing optional argument.
Luc Teirlinck <teirllm@auburn.edu>
parents: 69291
diff changeset
3374 (defun gud-tooltip-dereference (&optional arg)
67890
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3375 "Toggle whether tooltips should show `* expr' or `expr'.
78487
419c5c316b51 Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78234
diff changeset
3376 With arg, dereference expr if ARG is positive, otherwise do not derereference."
67890
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3377 (interactive "P")
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3378 (setq gud-tooltip-dereference
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3379 (if (null arg)
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3380 (not gud-tooltip-dereference)
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3381 (> (prefix-numeric-value arg) 0)))
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3382 (message "Dereferencing is now %s."
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3383 (if gud-tooltip-dereference "on" "off")))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3384
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3385 (define-obsolete-function-alias 'tooltip-gud-toggle-dereference
67890
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3386 'gud-tooltip-dereference "22.1")
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3387 (defvar tooltip-use-echo-area)
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3388 (declare-function tooltip-show "tooltip" (text &optional use-echo-area))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3389 (declare-function tooltip-strip-prompt "tooltip" (process output))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3390
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3391 ; This will only display data that comes in one chunk.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3392 ; Larger arrays (say 400 elements) are displayed in
63442
41b38bc88264 * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
Nick Roberts <nickrob@snap.net.nz>
parents: 63404
diff changeset
3393 ; the tooltip incompletely and spill over into the gud buffer.
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3394 ; Switching the process-filter creates timing problems and
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3395 ; it may be difficult to do better. Using annotations as in
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3396 ; gdb-ui.el gets round this problem.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3397 (defun gud-tooltip-process-output (process output)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3398 "Process debugger output and show it in a tooltip window."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3399 (set-process-filter process gud-tooltip-original-filter)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3400 (tooltip-show (tooltip-strip-prompt process output)
63442
41b38bc88264 * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
Nick Roberts <nickrob@snap.net.nz>
parents: 63404
diff changeset
3401 (or gud-tooltip-echo-area tooltip-use-echo-area)))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3402
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3403 (defun gud-tooltip-print-command (expr)
67890
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3404 "Return a suitable command to print the expression EXPR."
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3405 (case gud-minor-mode
63731
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
3406 (gdba (concat "server print " expr))
4121439fd904 (gud-tooltip-print-command): Indent properly.
Nick Roberts <nickrob@snap.net.nz>
parents: 63442
diff changeset
3407 ((dbx gdbmi) (concat "print " expr))
71238
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
3408 ((xdb pdb) (concat "p " expr))
151cfd1b3e3e (gud-running): Fix doc string.
Nick Roberts <nickrob@snap.net.nz>
parents: 71221
diff changeset
3409 (sdb (concat expr "/"))))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3410
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3411 (declare-function gdb-enqueue-input "gdb-ui" (item))
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3412 (declare-function tooltip-expr-to-print "tooltip" (event))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94673
diff changeset
3413 (declare-function tooltip-event-buffer "tooltip" (event))
86885
087d581b50f6 (gdb-create-define-alist)
Glenn Morris <rgm@gnu.org>
parents: 85973
diff changeset
3414
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3415 (defun gud-tooltip-tips (event)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3416 "Show tip for identifier or selection under the mouse.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3417 The mouse must either point at an identifier or inside a selected
80136
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
3418 region for the tip window to be shown. If `gud-tooltip-dereference' is t,
43a1ac4ee199 (gud-def, gud-last-speedbar-stackframe): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 79717
diff changeset
3419 add a `*' in front of the printed expression. In the case of a C program
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3420 controlled by GDB, show the associated #define directives when program is
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3421 not executing.
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3422
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3423 This function must return nil if it doesn't handle EVENT."
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3424 (let (process)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3425 (when (and (eventp event)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3426 gud-tooltip-mode
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3427 gud-comint-buffer
67403
adbf404cf806 (gud-speedbar-buttons, gud-tooltip-tips):
Nick Roberts <nickrob@snap.net.nz>
parents: 67251
diff changeset
3428 (buffer-name gud-comint-buffer); might be killed
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3429 (setq process (get-buffer-process gud-comint-buffer))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3430 (posn-point (event-end event))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3431 (or (and (eq gud-minor-mode 'gdba) (not gdb-active-process))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3432 (progn (setq gud-tooltip-event event)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3433 (eval (cons 'and gud-tooltip-display)))))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3434 (let ((expr (tooltip-expr-to-print event)))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3435 (when expr
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3436 (if (and (eq gud-minor-mode 'gdba)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3437 (not gdb-active-process))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3438 (progn
80511
e85df11c51e4 (gud-tooltip-tips): Use tooltip-event-buffer
Nick Roberts <nickrob@snap.net.nz>
parents: 80168
diff changeset
3439 (with-current-buffer (tooltip-event-buffer event)
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3440 (let ((define-elt (assoc expr gdb-define-alist)))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3441 (unless (null define-elt)
63442
41b38bc88264 * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
Nick Roberts <nickrob@snap.net.nz>
parents: 63404
diff changeset
3442 (tooltip-show
41b38bc88264 * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
Nick Roberts <nickrob@snap.net.nz>
parents: 63404
diff changeset
3443 (cdr define-elt)
41b38bc88264 * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
Nick Roberts <nickrob@snap.net.nz>
parents: 63404
diff changeset
3444 (or gud-tooltip-echo-area tooltip-use-echo-area))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3445 expr))))
67890
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3446 (when gud-tooltip-dereference
a6271fd07ee3 (gud-tooltip-dereference): Rename from toggle-gud-tooltip-dereference.
Nick Roberts <nickrob@snap.net.nz>
parents: 67714
diff changeset
3447 (setq expr (concat "*" expr)))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3448 (let ((cmd (gud-tooltip-print-command expr)))
62395
b4775e4a25b8 (gud-tooltip-mode): Add gud prefix to
Nick Roberts <nickrob@snap.net.nz>
parents: 62203
diff changeset
3449 (when (and gud-tooltip-mode (eq gud-minor-mode 'gdb))
b4775e4a25b8 (gud-tooltip-mode): Add gud prefix to
Nick Roberts <nickrob@snap.net.nz>
parents: 62203
diff changeset
3450 (gud-tooltip-mode -1)
b4775e4a25b8 (gud-tooltip-mode): Add gud prefix to
Nick Roberts <nickrob@snap.net.nz>
parents: 62203
diff changeset
3451 (message-box "Using GUD tooltips in this mode is unsafe\n\
b4775e4a25b8 (gud-tooltip-mode): Add gud prefix to
Nick Roberts <nickrob@snap.net.nz>
parents: 62203
diff changeset
3452 so they have been disabled."))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3453 (unless (null cmd) ; CMD can be nil if unknown debugger
62203
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3454 (if (memq gud-minor-mode '(gdba gdbmi))
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3455 (if gdb-macro-info
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3456 (gdb-enqueue-input
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3457 (list (concat
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3458 gdb-server-prefix "macro expand " expr "\n")
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3459 `(lambda () (gdb-tooltip-print-1 ,expr))))
8ea5bf9aeed7 (gud-tooltip-mode): Require tooltip to be safe.
Nick Roberts <nickrob@snap.net.nz>
parents: 62134
diff changeset
3460 (gdb-enqueue-input
70666
1ba52dfffa46 (gud-tooltip-tips): Add missing argument to
Nick Roberts <nickrob@snap.net.nz>
parents: 70373
diff changeset
3461 (list (concat cmd "\n")
1ba52dfffa46 (gud-tooltip-tips): Add missing argument to
Nick Roberts <nickrob@snap.net.nz>
parents: 70373
diff changeset
3462 `(lambda () (gdb-tooltip-print ,expr)))))
62134
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3463 (setq gud-tooltip-original-filter (process-filter process))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3464 (set-process-filter process 'gud-tooltip-process-output)
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3465 (gud-basic-call cmd))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3466 expr))))))))
6cd1d39df919 Move code for GUD tooltips from tooltip.el.
Nick Roberts <nickrob@snap.net.nz>
parents: 62049
diff changeset
3467
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3468 (provide 'gud)
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3469
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92148
diff changeset
3470 ;; arch-tag: 6d990948-df65-461a-be39-1c7fb83ac4c4
51494
ba857b9204ca Moved from lisp/.
Juanma Barranquero <lekktu@gmail.com>
parents:
diff changeset
3471 ;;; gud.el ends here