1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
|
Article 15041 of comp.lang.perl:
Path: netlabs!news.cerf.net!usc!sol.ctr.columbia.edu!news.kei.com!bloom-beacon.mit.edu!paperboy.osf.org!meissner
From: meissner@osf.org (Michael Meissner)
Newsgroups: comp.lang.perl
Subject: Re: question on using perldb.el with emacs
Date: 17 Oct 1993 21:10:21 GMT
Organization: Open Software Foundation
Lines: 297
Message-ID: <MEISSNER.93Oct17171021@pasta.osf.org>
References: <BSHAW.93Oct17143524@bobasun.spdc.ti.com>
NNTP-Posting-Host: pasta.osf.org
In-reply-to: bshaw@bobasun.spdc.ti.com's message of Sun, 17 Oct 1993 19:35:24 GMT
In article <BSHAW.93Oct17143524@bobasun.spdc.ti.com> bshaw@bobasun.spdc.ti.com
(Bob Shaw) writes:
| Hi folks
|
| Say, I'm trying to use perldb with emacs. I can invoke perldb
| within emacs ok and get the window *perldb-foo* but when it asks
| for "additional command line arguments" , no matter what I give it
| I get the error message Symbol's function definition is void: make-
| shell.
|
| The debugger , by itself, works fine but wanted to try out perldb in
| emacs.
This is a symptom of using Emacs 19.xx with perldb.el which was originally made
for emacs version 18.xx. You can either install the emacs19 replacement for
perldb that hooks it in with GUD (grand unified debugger), or apply the patches
that I picked off of the net (I use the perldb replacement that uses GUD
myself):
#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 10/17/1993 21:07 UTC by meissner@pasta.osf.org
# Source directory /usr/users/meissner/elisp
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 4761 -rw-r--r-- emacs19-perldb.el
# 3845 -rw-rw-r-- emacs19-perldb.patches
#
# ============= emacs19-perldb.el ==============
if test -f 'emacs19-perldb.el' -a X"$1" != X"-c"; then
echo 'x - skipping emacs19-perldb.el (File already exists)'
else
echo 'x - extracting emacs19-perldb.el (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'emacs19-perldb.el' &&
X;; Author : Stephane Boucher
X;; Note : This is an add on for gud (Part of GNU Emacs 19). It is
X;; derived from the gdb section that is part of gud.
X
X;; Copyright (C) 1993 Stephane Boucher.
X
X;; Perldb is free software; you can redistribute it and/or modify
X;; it under the terms of the GNU General Public License as published by
X;; the Free Software Foundation; either version 2, or (at your option)
X;; any later version.
X
X;; Perldb Emacs is distributed in the hope that it will be useful,
X;; but WITHOUT ANY WARRANTY; without even the implied warranty of
X;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X;; GNU General Public License for more details.
X
X;; You should have received a copy of the GNU General Public License
X;; along with GNU Emacs; see the file COPYING. If not, write to
X;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
X
X(require 'gud)
X
X;; ======================================================================
X;; perldb functions
X
X;;; History of argument lists passed to perldb.
X(defvar gud-perldb-history nil)
X
X(defun gud-perldb-massage-args (file args)
X (cons "-d" (cons file (cons "-emacs" args))))
X
X;; There's no guarantee that Emacs will hand the filter the entire
X;; marker at once; it could be broken up across several strings. We
X;; might even receive a big chunk with several markers in it. If we
X;; receive a chunk of text which looks like it might contain the
X;; beginning of a marker, we save it here between calls to the
X;; filter.
X(defvar gud-perldb-marker-acc "")
X
X(defun gud-perldb-marker-filter (string)
X (save-match-data
X (setq gud-perldb-marker-acc (concat gud-perldb-marker-acc string))
X (let ((output ""))
X
X ;; Process all the complete markers in this chunk.
X (while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n"
X gud-perldb-marker-acc)
X (setq
X
X ;; Extract the frame position from the marker.
X gud-last-frame
X (cons (substring gud-perldb-marker-acc (match-beginning 1) (match-end 1))
X (string-to-int (substring gud-perldb-marker-acc
X (match-beginning 2)
X (match-end 2))))
X
X ;; Append any text before the marker to the output we're going
X ;; to return - we don't include the marker in this text.
X output (concat output
X (substring gud-perldb-marker-acc 0 (match-beginning 0)))
X
X ;; Set the accumulator to the remaining text.
X gud-perldb-marker-acc (substring gud-perldb-marker-acc (match-end 0))))
X
X ;; Does the remaining text look like it might end with the
X ;; beginning of another marker? If it does, then keep it in
X ;; gud-perldb-marker-acc until we receive the rest of it. Since we
X ;; know the full marker regexp above failed, it's pretty simple to
X ;; test for marker starts.
X (if (string-match "^\032.*\\'" gud-perldb-marker-acc)
X (progn
X ;; Everything before the potential marker start can be output.
X (setq output (concat output (substring gud-perldb-marker-acc
X 0 (match-beginning 0))))
X
X ;; Everything after, we save, to combine with later input.
X (setq gud-perldb-marker-acc
X (substring gud-perldb-marker-acc (match-beginning 0))))
X
X (setq output (concat output gud-perldb-marker-acc)
X gud-perldb-marker-acc ""))
X
X output)))
X
X(defun gud-perldb-find-file (f)
X (find-file-noselect f))
X
X;;;###autoload
X(defun perldb (command-line)
X "Run perldb on program FILE in buffer *gud-FILE*.
XThe directory containing FILE becomes the initial working directory
Xand source-file directory for your debugger."
X (interactive
X (list (read-from-minibuffer "Run perldb (like this): "
X (if (consp gud-perldb-history)
X (car gud-perldb-history)
X "perl ")
X nil nil
X '(gud-perldb-history . 1))))
X (gud-overload-functions '((gud-massage-args . gud-perldb-massage-args)
X (gud-marker-filter . gud-perldb-marker-filter)
X (gud-find-file . gud-perldb-find-file)
X ))
X
X (gud-common-init command-line)
X
X (gud-def gud-break "b %l" "\C-b" "Set breakpoint at current line.")
X (gud-def gud-remove "d %l" "\C-d" "Remove breakpoint at current line")
X (gud-def gud-step "s" "\C-s" "Step one source line with display.")
X (gud-def gud-next "n" "\C-n" "Step one line (skip functions).")
X (gud-def gud-cont "c" "\C-r" "Continue with display.")
X; (gud-def gud-finish "finish" "\C-f" "Finish executing current function.")
X; (gud-def gud-up "up %p" "<" "Up N stack frames (numeric arg).")
X; (gud-def gud-down "down %p" ">" "Down N stack frames (numeric arg).")
X (gud-def gud-print "%e" "\C-p" "Evaluate perl expression at point.")
X
X (setq comint-prompt-regexp "^ DB<[0-9]+> ")
X (run-hooks 'perldb-mode-hook)
X )
SHAR_EOF
chmod 0644 emacs19-perldb.el ||
echo 'restore of emacs19-perldb.el failed'
Wc_c="`wc -c < 'emacs19-perldb.el'`"
test 4761 -eq "$Wc_c" ||
echo 'emacs19-perldb.el: original size 4761, current size' "$Wc_c"
fi
# ============= emacs19-perldb.patches ==============
if test -f 'emacs19-perldb.patches' -a X"$1" != X"-c"; then
echo 'x - skipping emacs19-perldb.patches (File already exists)'
else
echo 'x - extracting emacs19-perldb.patches (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'emacs19-perldb.patches' &&
XFrom dmm0t@rincewind.mech.virginia.edu Fri Jul 16 23:17:10 1993
XPath: paperboy.osf.org!bloom-beacon.mit.edu!biosci!uwm.edu!ux1.cso.uiuc.edu!howland.reston.ans.net!darwin.sura.net!news-feed-2.peachnet.edu!concert!uvaarpa!murdoch!rincewind.mech.virginia.edu!dmm0t
XFrom: dmm0t@rincewind.mech.virginia.edu (David Meyer)
XNewsgroups: gnu.emacs.sources
XSubject: patches to perldb.el for emacs-19
XMessage-ID: <CA7uq9.30J@murdoch.acc.Virginia.EDU>
XDate: 15 Jul 93 17:18:07 GMT
XSender: usenet@murdoch.acc.Virginia.EDU
XOrganization: University of Virginia
XLines: 97
X
X
XHere are my patches to perldb.el (the perl debugger mode that comes
Xwith perl 4.0xx). Basically, all I've done is to hack perldb.el to
Xuse comint.el stuff rather than the old shell.el stuff (i.e. change
Xshell-mode-map to comint-mode-map).
X
XI've been using my patched version without problem, but if anyone sees
Xsomething I've missed, please post or send e-mail.
X
X Thanks,
X Dave
X
X
X*** /Users/dmm0t/perldb.el Thu Jul 15 13:06:59 1993
X--- perldb.el Tue Jul 6 22:24:41 1993
X***************
X*** 65,71 ****
X
X (if perldb-mode-map
X nil
X! (setq perldb-mode-map (copy-keymap shell-mode-map))
X (define-key perldb-mode-map "\C-l" 'perldb-refresh))
X
X (define-key ctl-x-map " " 'perldb-break)
X--- 65,71 ----
X
X (if perldb-mode-map
X nil
X! (setq perldb-mode-map (copy-keymap comint-mode-map))
X (define-key perldb-mode-map "\C-l" 'perldb-refresh))
X
X (define-key ctl-x-map " " 'perldb-break)
X***************
X*** 122,131 ****
X (setq mode-name "Inferior Perl")
X (setq mode-line-process '(": %s"))
X (use-local-map perldb-mode-map)
X! (make-local-variable 'last-input-start)
X! (setq last-input-start (make-marker))
X! (make-local-variable 'last-input-end)
X! (setq last-input-end (make-marker))
X (make-local-variable 'perldb-last-frame)
X (setq perldb-last-frame nil)
X (make-local-variable 'perldb-last-frame-displayed-p)
X--- 122,131 ----
X (setq mode-name "Inferior Perl")
X (setq mode-line-process '(": %s"))
X (use-local-map perldb-mode-map)
X! (make-local-variable 'comint-last-input-start)
X! (setq comint-last-input-start (make-marker))
X! (make-local-variable 'comint-last-input-end)
X! (setq comint-last-input-end (make-marker))
X (make-local-variable 'perldb-last-frame)
X (setq perldb-last-frame nil)
X (make-local-variable 'perldb-last-frame-displayed-p)
X***************
X*** 134,142 ****
X (setq perldb-delete-prompt-marker nil)
X (make-local-variable 'perldb-filter-accumulator)
X (setq perldb-filter-accumulator nil)
X! (make-local-variable 'shell-prompt-pattern)
X! (setq shell-prompt-pattern perldb-prompt-pattern)
X! (run-hooks 'shell-mode-hook 'perldb-mode-hook))
X
X (defvar current-perldb-buffer nil)
X
X--- 134,142 ----
X (setq perldb-delete-prompt-marker nil)
X (make-local-variable 'perldb-filter-accumulator)
X (setq perldb-filter-accumulator nil)
X! (make-local-variable 'comint-prompt-regexp)
X! (setq comint-prompt-regexp perldb-prompt-pattern)
X! (run-hooks 'comint-mode-hook 'perldb-mode-hook))
X
X (defvar current-perldb-buffer nil)
X
X***************
X*** 189,195 ****
X (setq default-directory dir)
X (or (bolp) (newline))
X (insert "Current directory is " default-directory "\n")
X! (apply 'make-shell
X (concat "perldb-" file) perldb-command-name nil "-d" path "-emacs"
X (parse-args args))
X (perldb-mode)
X--- 189,195 ----
X (setq default-directory dir)
X (or (bolp) (newline))
X (insert "Current directory is " default-directory "\n")
X! (apply 'make-comint
X (concat "perldb-" file) perldb-command-name nil "-d" path "-emacs"
X (parse-args args))
X (perldb-mode)
X--
XDavid M. Meyer Mechanical & Aerospace Engineering
Xdmm0t@rincewind.mech.virginia.edu University of Virginia
XNeXTmail ok
X
SHAR_EOF
chmod 0664 emacs19-perldb.patches ||
echo 'restore of emacs19-perldb.patches failed'
Wc_c="`wc -c < 'emacs19-perldb.patches'`"
test 3845 -eq "$Wc_c" ||
echo 'emacs19-perldb.patches: original size 3845, current size' "$Wc_c"
fi
exit 0
--
Michael Meissner email: meissner@osf.org phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA, 02142
Old hackers never die, their bugs just increase.
|