debugger2 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.travis.yml +3 -0
- data/AUTHORS +10 -0
- data/CHANGELOG.md +65 -0
- data/CONTRIBUTING.md +1 -0
- data/Gemfile +3 -0
- data/LICENSE +23 -0
- data/OLDER_CHANGELOG +334 -0
- data/OLD_CHANGELOG +5655 -0
- data/OLD_README +122 -0
- data/README.md +108 -0
- data/Rakefile +78 -0
- data/bin/rdebug +397 -0
- data/debugger2.gemspec +29 -0
- data/doc/.cvsignore +42 -0
- data/doc/Makefile.am +63 -0
- data/doc/emacs-notes.txt +38 -0
- data/doc/hanoi.rb +35 -0
- data/doc/primes.rb +28 -0
- data/doc/rdebug-emacs.texi +1030 -0
- data/doc/ruby-debug.texi +3791 -0
- data/doc/test-tri2.rb +18 -0
- data/doc/tri3.rb +8 -0
- data/doc/triangle.rb +12 -0
- data/emacs/Makefile.am +130 -0
- data/emacs/rdebug-annotate.el +385 -0
- data/emacs/rdebug-breaks.el +407 -0
- data/emacs/rdebug-cmd.el +92 -0
- data/emacs/rdebug-core.el +502 -0
- data/emacs/rdebug-dbg.el +62 -0
- data/emacs/rdebug-error.el +79 -0
- data/emacs/rdebug-fns.el +111 -0
- data/emacs/rdebug-frames.el +230 -0
- data/emacs/rdebug-gud.el +242 -0
- data/emacs/rdebug-help.el +104 -0
- data/emacs/rdebug-info.el +83 -0
- data/emacs/rdebug-layouts.el +180 -0
- data/emacs/rdebug-locring.el +118 -0
- data/emacs/rdebug-output.el +106 -0
- data/emacs/rdebug-regexp.el +118 -0
- data/emacs/rdebug-secondary.el +260 -0
- data/emacs/rdebug-shortkey.el +175 -0
- data/emacs/rdebug-source.el +568 -0
- data/emacs/rdebug-track.el +392 -0
- data/emacs/rdebug-varbuf.el +150 -0
- data/emacs/rdebug-vars.el +125 -0
- data/emacs/rdebug-watch.el +132 -0
- data/emacs/rdebug.el +326 -0
- data/emacs/test/elk-test.el +242 -0
- data/emacs/test/test-annotate.el +103 -0
- data/emacs/test/test-cmd.el +116 -0
- data/emacs/test/test-core.el +104 -0
- data/emacs/test/test-fns.el +65 -0
- data/emacs/test/test-frames.el +62 -0
- data/emacs/test/test-gud.el +35 -0
- data/emacs/test/test-indent.el +58 -0
- data/emacs/test/test-regexp.el +144 -0
- data/emacs/test/test-shortkey.el +61 -0
- data/ext/ruby_debug/breakpoint.c +630 -0
- data/ext/ruby_debug/extconf.rb +11 -0
- data/ext/ruby_debug/ruby_debug.c +2203 -0
- data/ext/ruby_debug/ruby_debug.h +151 -0
- data/lib/debugger.rb +5 -0
- data/lib/debugger/version.rb +5 -0
- data/lib/debugger2.rb +6 -0
- data/lib/ruby-debug-base.rb +307 -0
- data/lib/ruby-debug.rb +176 -0
- data/lib/ruby-debug/command.rb +227 -0
- data/lib/ruby-debug/commands/breakpoints.rb +153 -0
- data/lib/ruby-debug/commands/catchpoint.rb +55 -0
- data/lib/ruby-debug/commands/condition.rb +49 -0
- data/lib/ruby-debug/commands/continue.rb +38 -0
- data/lib/ruby-debug/commands/control.rb +107 -0
- data/lib/ruby-debug/commands/display.rb +120 -0
- data/lib/ruby-debug/commands/edit.rb +48 -0
- data/lib/ruby-debug/commands/enable.rb +202 -0
- data/lib/ruby-debug/commands/eval.rb +176 -0
- data/lib/ruby-debug/commands/finish.rb +42 -0
- data/lib/ruby-debug/commands/frame.rb +301 -0
- data/lib/ruby-debug/commands/help.rb +56 -0
- data/lib/ruby-debug/commands/info.rb +467 -0
- data/lib/ruby-debug/commands/irb.rb +123 -0
- data/lib/ruby-debug/commands/jump.rb +66 -0
- data/lib/ruby-debug/commands/kill.rb +51 -0
- data/lib/ruby-debug/commands/list.rb +94 -0
- data/lib/ruby-debug/commands/method.rb +84 -0
- data/lib/ruby-debug/commands/quit.rb +39 -0
- data/lib/ruby-debug/commands/reload.rb +40 -0
- data/lib/ruby-debug/commands/save.rb +90 -0
- data/lib/ruby-debug/commands/set.rb +223 -0
- data/lib/ruby-debug/commands/show.rb +247 -0
- data/lib/ruby-debug/commands/skip.rb +35 -0
- data/lib/ruby-debug/commands/source.rb +36 -0
- data/lib/ruby-debug/commands/stepping.rb +81 -0
- data/lib/ruby-debug/commands/threads.rb +189 -0
- data/lib/ruby-debug/commands/tmate.rb +36 -0
- data/lib/ruby-debug/commands/trace.rb +57 -0
- data/lib/ruby-debug/commands/variables.rb +199 -0
- data/lib/ruby-debug/debugger.rb +5 -0
- data/lib/ruby-debug/helper.rb +69 -0
- data/lib/ruby-debug/interface.rb +232 -0
- data/lib/ruby-debug/processor.rb +474 -0
- data/man/rdebug.1 +241 -0
- data/old_scripts/Makefile.am +14 -0
- data/old_scripts/README.md +2 -0
- data/old_scripts/autogen.sh +4 -0
- data/old_scripts/configure.ac +12 -0
- data/old_scripts/rdbg.rb +33 -0
- data/old_scripts/runner.sh +7 -0
- data/old_scripts/svn2cl_usermap +3 -0
- data/test/.cvsignore +1 -0
- data/test/breakpoints_test.rb +366 -0
- data/test/conditions_test.rb +77 -0
- data/test/continue_test.rb +28 -0
- data/test/display_test.rb +143 -0
- data/test/edit_test.rb +55 -0
- data/test/eval_test.rb +94 -0
- data/test/examples/breakpoint1.rb +15 -0
- data/test/examples/breakpoint2.rb +7 -0
- data/test/examples/conditions.rb +4 -0
- data/test/examples/continue.rb +4 -0
- data/test/examples/display.rb +5 -0
- data/test/examples/edit.rb +3 -0
- data/test/examples/edit2.rb +3 -0
- data/test/examples/eval.rb +4 -0
- data/test/examples/finish.rb +20 -0
- data/test/examples/frame.rb +31 -0
- data/test/examples/help.rb +2 -0
- data/test/examples/info.rb +48 -0
- data/test/examples/info2.rb +3 -0
- data/test/examples/irb.rb +6 -0
- data/test/examples/jump.rb +14 -0
- data/test/examples/kill.rb +2 -0
- data/test/examples/list.rb +12 -0
- data/test/examples/method.rb +15 -0
- data/test/examples/post_mortem.rb +19 -0
- data/test/examples/quit.rb +2 -0
- data/test/examples/reload.rb +6 -0
- data/test/examples/restart.rb +6 -0
- data/test/examples/save.rb +3 -0
- data/test/examples/set.rb +3 -0
- data/test/examples/set_annotate.rb +12 -0
- data/test/examples/settings.rb +1 -0
- data/test/examples/show.rb +2 -0
- data/test/examples/source.rb +3 -0
- data/test/examples/stepping.rb +21 -0
- data/test/examples/thread.rb +32 -0
- data/test/examples/tmate.rb +10 -0
- data/test/examples/trace.rb +7 -0
- data/test/examples/trace_threads.rb +20 -0
- data/test/examples/variables.rb +26 -0
- data/test/finish_test.rb +49 -0
- data/test/frame_test.rb +140 -0
- data/test/help_test.rb +51 -0
- data/test/info_test.rb +326 -0
- data/test/irb_test.rb +82 -0
- data/test/jump_test.rb +70 -0
- data/test/kill_test.rb +49 -0
- data/test/list_test.rb +147 -0
- data/test/method_test.rb +72 -0
- data/test/post_mortem_test.rb +25 -0
- data/test/quit_test.rb +56 -0
- data/test/reload_test.rb +47 -0
- data/test/restart_test.rb +145 -0
- data/test/save_test.rb +94 -0
- data/test/set_test.rb +183 -0
- data/test/show_test.rb +294 -0
- data/test/source_test.rb +46 -0
- data/test/stepping_test.rb +122 -0
- data/test/support/breakpoint.rb +12 -0
- data/test/support/context.rb +14 -0
- data/test/support/matchers.rb +67 -0
- data/test/support/mocha_extensions.rb +71 -0
- data/test/support/processor.rb +7 -0
- data/test/support/test_dsl.rb +206 -0
- data/test/support/test_interface.rb +66 -0
- data/test/test_helper.rb +9 -0
- data/test/thread_test.rb +124 -0
- data/test/tmate_test.rb +45 -0
- data/test/trace_test.rb +156 -0
- data/test/variables_test.rb +116 -0
- metadata +319 -0
data/debugger2.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'rubygems' unless defined? Gem
|
3
|
+
require File.dirname(__FILE__) + "/lib/debugger/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{debugger2}
|
7
|
+
s.version = Debugger::VERSION
|
8
|
+
s.authors = ['Koichi Sasada', "Zachary Scott", "Kent Sibilev", "Mark Moseley", "Gabriel Horner"]
|
9
|
+
s.email = "ko1@atdot.net"
|
10
|
+
s.homepage = "https://github.com/ko1/debugger2"
|
11
|
+
s.summary = %q{Fast Ruby debugger - base + cli}
|
12
|
+
s.description = %q{debugger is a fast implementation of the standard Ruby debugger debug.rb.
|
13
|
+
It is implemented by utilizing a new Ruby C API hook. The core component
|
14
|
+
provides support that front-ends can build on. It provides breakpoint
|
15
|
+
handling, bindings for stack frames among other things.
|
16
|
+
}
|
17
|
+
s.required_rubygems_version = ">= 1.3.6"
|
18
|
+
s.extra_rdoc_files = [ "README.md" ]
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.extensions << "ext/ruby_debug/extconf.rb"
|
21
|
+
s.executables = ["rdebug"]
|
22
|
+
s.add_dependency "columnize", ">= 0.3.1"
|
23
|
+
s.add_dependency "debugger-linecache", '~> 1.2.0'
|
24
|
+
s.add_development_dependency 'rake', '~> 0.9.2.2'
|
25
|
+
s.add_development_dependency 'rake-compiler', '~> 0.8.0'
|
26
|
+
s.add_development_dependency 'minitest', '~> 2.12.1'
|
27
|
+
s.add_development_dependency 'mocha', '~> 0.13.0'
|
28
|
+
s.license = "BSD"
|
29
|
+
end
|
data/doc/.cvsignore
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
Makefile
|
2
|
+
Makefile.in
|
3
|
+
mdate-sh
|
4
|
+
missing
|
5
|
+
rdebug-emacs.aux
|
6
|
+
rdebug-emacs.cp
|
7
|
+
rdebug-emacs.cps
|
8
|
+
rdebug-emacs.fn
|
9
|
+
rdebug-emacs.fns
|
10
|
+
rdebug-emacs.html
|
11
|
+
rdebug-emacs.info
|
12
|
+
rdebug-emacs.ky
|
13
|
+
rdebug-emacs.log
|
14
|
+
rdebug-emacs.pdf
|
15
|
+
rdebug-emacs.pg
|
16
|
+
rdebug-emacs.pgs
|
17
|
+
rdebug-emacs.toc
|
18
|
+
rdebug-emacs.tp
|
19
|
+
rdebug-emacs.vr
|
20
|
+
rdoc
|
21
|
+
ruby-debug.aux
|
22
|
+
ruby-debug.cp
|
23
|
+
ruby-debug.cps
|
24
|
+
ruby-debug.fn
|
25
|
+
ruby-debug.fns
|
26
|
+
ruby-debug.html
|
27
|
+
ruby-debug.info
|
28
|
+
ruby-debug.ky
|
29
|
+
ruby-debug.kys
|
30
|
+
ruby-debug.log
|
31
|
+
ruby-debug.pdf
|
32
|
+
ruby-debug.pg
|
33
|
+
ruby-debug.pgs
|
34
|
+
ruby-debug.toc
|
35
|
+
ruby-debug.tp
|
36
|
+
ruby-debug.vr
|
37
|
+
ruby-debug.vrs
|
38
|
+
stamp-1
|
39
|
+
stamp-vti
|
40
|
+
texinfo.tex
|
41
|
+
version-rdebug-emacs.texi
|
42
|
+
version.texi
|
data/doc/Makefile.am
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# $Id: Makefile.am,v 1.3 2006/12/28 12:34:25 rockyb Exp $
|
3
|
+
# Copyright (C) 2007 Rocky Bernstein
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
##############################################################################
|
18
|
+
|
19
|
+
EXT=1
|
20
|
+
man1_MANS = rdebug.$(EXT)
|
21
|
+
|
22
|
+
EXTRA_DIST = $(man1_MANS) \
|
23
|
+
hanoi.rb primes.rb test-tri2.rb tri3.rb triangle.rb \
|
24
|
+
ruby-debug.info ruby-debug.html ruby-debug.pdf
|
25
|
+
|
26
|
+
info_TEXINFOS = ruby-debug.texi rdebug-emacs.texi
|
27
|
+
|
28
|
+
all: $(INFO_DEPS) $(man1_MANS) html pdf
|
29
|
+
|
30
|
+
pdf: ruby-debug.pdf rdebug-emacs.pdf
|
31
|
+
|
32
|
+
txt: ruby-debug.txt rdebug-emacs.txt
|
33
|
+
|
34
|
+
ps: ruby-debug.ps rdebug-emacs.ps
|
35
|
+
|
36
|
+
man: $(man1_MANS)
|
37
|
+
|
38
|
+
html: ruby-debug.html rdebug-emacs.html
|
39
|
+
|
40
|
+
ruby-debug.html: ruby-debug.texi
|
41
|
+
texi2html $(srcdir)/ruby-debug.texi || true
|
42
|
+
|
43
|
+
rdebug-emacs.html: rdebug-emacs.texi
|
44
|
+
texi2html $(srcdir)/rdebug-emacs.texi || true
|
45
|
+
|
46
|
+
%.ps.gz: %.ps
|
47
|
+
gzip -9c $< > $@
|
48
|
+
|
49
|
+
# Our `texinfo.tex' must reside in the current directory, otherwise
|
50
|
+
# texi2dvi will use the default.
|
51
|
+
.texi.pdf:
|
52
|
+
$(TEXI2PDF) -I $(srcdir) $<
|
53
|
+
|
54
|
+
.texi.dvi:
|
55
|
+
$(TEXI2DVI) -I $(srcdir) $<
|
56
|
+
|
57
|
+
.dvi.ps:
|
58
|
+
test -d $(docdir) || mkdir $(docdir)
|
59
|
+
$(DVIPS) $< -o $@
|
60
|
+
|
61
|
+
all-formats: pdf dvi txt ps html
|
62
|
+
|
63
|
+
MOSTLYCLEANFILES = rubydb.tgs rubydb.ps.gz rubydb.pdf rubydb.html rubydb_toc.html rubydb_foot.html rubydb-man.html
|
data/doc/emacs-notes.txt
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
* rdebug.el is loaded by the user when Emacs is launched. (Should
|
2
|
+
Rdebug ever be part of Emacs, this should be the items autoloaded by
|
3
|
+
Emacs.)
|
4
|
+
|
5
|
+
There is a command buffer which is the gud process. There are a number
|
6
|
+
of "secondary" buffers have in gud-comint-buffer the gud process. The
|
7
|
+
way we go the other direction from gud process to secondary buffer is
|
8
|
+
by buffer name. Source buffers don't seem to have a local
|
9
|
+
gud-comint-buffer variable set but use the global value. Perhaps
|
10
|
+
source buffer should have their own buffer-local value(s)?
|
11
|
+
|
12
|
+
For each secondary buffer we have things for that specific buffer. In particular:
|
13
|
+
* frames (rdebug-frames.el)
|
14
|
+
* output (rdebug-output.el)
|
15
|
+
* variables (rdebug-varbuf.el)
|
16
|
+
* watch or display-expressions - (rdebug-watch.el
|
17
|
+
* breakpoints (rdebug-breaks.el)
|
18
|
+
|
19
|
+
Each specific secondary buffer includes
|
20
|
+
- setting the buffer up,
|
21
|
+
- specific commands for that buffer
|
22
|
+
- the kinds of functions that buffer deals with (e.g. frame
|
23
|
+
things for the "frame" buffer or breakpoints for the "breakpoints" buffer.)
|
24
|
+
|
25
|
+
* rdebug-gud.el contains things that interface to gdb. Possibly also
|
26
|
+
things that interface to gdb-ui should be there as well.
|
27
|
+
|
28
|
+
* rdebug-shortkey.el has all the magic that needs to be done to make
|
29
|
+
shortkey mode work.
|
30
|
+
|
31
|
+
* rdebug-track is all the things to make rdebug-track mode work.
|
32
|
+
|
33
|
+
I have some additions, which deals with *when* certain files are loaded.
|
34
|
+
|
35
|
+
* rdebug-source.el is loaded when the first Ruby source file is loaded
|
36
|
+
Of course, the name rdebug-source.el is not important, we could rename
|
37
|
+
it to something else and reuse the name for other source-related
|
38
|
+
things.
|
data/doc/hanoi.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
def hanoi(n,a,b,c)
|
4
|
+
if n-1 > 0
|
5
|
+
hanoi(n-1, a, c, b)
|
6
|
+
end
|
7
|
+
puts "Move disk %s to %s" % [a, b]
|
8
|
+
if n-1 > 0
|
9
|
+
hanoi(n-1, c, b, a)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
i_args=ARGV.length
|
14
|
+
if i_args > 1
|
15
|
+
puts "*** Need number of disks or no parameter"
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
19
|
+
n=3
|
20
|
+
|
21
|
+
if i_args > 0
|
22
|
+
begin
|
23
|
+
n = ARGV[0].to_i
|
24
|
+
rescue ValueError, msg:
|
25
|
+
print "** Expecting an integer, got: %s" % ARGV[0].to_s
|
26
|
+
exit 2
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if n < 1 or n > 100
|
31
|
+
puts "*** number of disks should be between 1 and 100"
|
32
|
+
exit 2
|
33
|
+
end
|
34
|
+
|
35
|
+
hanoi(n, :a, :b, :c)
|
data/doc/primes.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Enumerator for primes
|
3
|
+
class SievePrime
|
4
|
+
@@odd_primes = []
|
5
|
+
def self.next_prime(&block)
|
6
|
+
candidate = 2
|
7
|
+
yield candidate
|
8
|
+
not_prime = false
|
9
|
+
candidate += 1
|
10
|
+
while true do
|
11
|
+
@@odd_primes.each do |p|
|
12
|
+
not_prime = (0 == (candidate % p))
|
13
|
+
break if not_prime
|
14
|
+
end
|
15
|
+
unless not_prime
|
16
|
+
@@odd_primes << candidate
|
17
|
+
yield candidate
|
18
|
+
end
|
19
|
+
candidate += 2
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
SievePrime.next_prime do |prime|
|
24
|
+
puts prime
|
25
|
+
break if prime > 10
|
26
|
+
end
|
27
|
+
|
28
|
+
|
@@ -0,0 +1,1030 @@
|
|
1
|
+
\input texinfo @c -*-texinfo-*-
|
2
|
+
@setfilename rdebug-emacs.info
|
3
|
+
|
4
|
+
@set DBG ruby-debug
|
5
|
+
@set ttrdebug @code{rdebug}
|
6
|
+
@set ttDBG @code{@value{DBG}}
|
7
|
+
@set Emacs @sc{gnu} Emacs
|
8
|
+
|
9
|
+
@set RDEBUG_EMACS_VERSION 0.1
|
10
|
+
@include version-rdebug-emacs.texi
|
11
|
+
@finalout
|
12
|
+
|
13
|
+
@c Karl Berry informs me that this will add straight quotes in
|
14
|
+
@c typewriter text.
|
15
|
+
@c See the "Inserting Quote Characters" node in the Texinfo manual
|
16
|
+
@set txicodequoteundirected
|
17
|
+
@set txicodequotebacktick
|
18
|
+
|
19
|
+
@c THIS MANUAL REQUIRES TEXINFO 4.0 OR LATER.
|
20
|
+
|
21
|
+
@c This is a dir.info fragment to support semi-automated addition of
|
22
|
+
@c manuals to an info tree.
|
23
|
+
@dircategory Programming & development tools.
|
24
|
+
@direntry
|
25
|
+
* ruby-debug-emacs: (ruby-debug). Ruby Debugger for GNU Emacs
|
26
|
+
@end direntry
|
27
|
+
|
28
|
+
@titlepage
|
29
|
+
@title Debugging with @code{ruby-debug} inside GNU Emacs Version @value{RDEBUG_EMACS_VERSION}
|
30
|
+
@sp 1
|
31
|
+
@subtitle @value{EDITION} Edition
|
32
|
+
@subtitle @value{UPDATED-MONTH}
|
33
|
+
@author Rocky Bernstein and Anders Lindgren
|
34
|
+
@page
|
35
|
+
@ifset WHERETO
|
36
|
+
@tex
|
37
|
+
{\parskip=0pt
|
38
|
+
\hfill (Send bugs and comments on ruby-debug to fill in...)\par
|
39
|
+
\hfill {\it Debugging with {\tt ruby-debug}\par
|
40
|
+
\hfill \TeX{}info \texinfoversion\par
|
41
|
+
}
|
42
|
+
@end tex
|
43
|
+
@end ifset
|
44
|
+
@end titlepage
|
45
|
+
@page
|
46
|
+
|
47
|
+
@node Top, Getting started, (dir), (dir)
|
48
|
+
@top Debugging with ruby-debug under GNU Emacs
|
49
|
+
|
50
|
+
@menu
|
51
|
+
* Getting started::
|
52
|
+
* The Multi-window Mode::
|
53
|
+
* Debugger Buffers::
|
54
|
+
* Emacs Debugger Commands:: Indexes (nodes containing large menus)
|
55
|
+
* Emacs Command Index:: An item for each GNU/Emacs command name.
|
56
|
+
* Emacs Function Index:: An item for each Emacs Function.
|
57
|
+
* Emacs Key Binding Index:: An item for each Emacs Debugger Command.
|
58
|
+
|
59
|
+
@detailmenu
|
60
|
+
--- The Detailed Node Listing ---
|
61
|
+
|
62
|
+
Getting started
|
63
|
+
|
64
|
+
* Installation:: How to install this package
|
65
|
+
* Emacs rdebug:: Invoke the ruby debugger initially
|
66
|
+
* Emacs shell tracking mode:: Entering rdebug from an existing shell buffer
|
67
|
+
|
68
|
+
Debugger Buffers
|
69
|
+
|
70
|
+
* Debugger Command Buffer::
|
71
|
+
* Emacs Source:: Commands from the source script
|
72
|
+
|
73
|
+
Emacs Debugger Commands
|
74
|
+
|
75
|
+
* Emacs Debugger Common Commands::
|
76
|
+
* Emacs Debugger Breakpoint Buffer Commands::
|
77
|
+
* Emacs Debugger Stack Buffer Commands::
|
78
|
+
* Emacs Debugger Variable Buffer Commands::
|
79
|
+
* Emacs Debugger Watch Buffer Commands::
|
80
|
+
* Emacs GUD Commands::
|
81
|
+
|
82
|
+
@end detailmenu
|
83
|
+
@end menu
|
84
|
+
|
85
|
+
This file describes ruby-debug, the Ruby Debugger,
|
86
|
+
version @value{RDEBUG_EMACS_VERSION}
|
87
|
+
|
88
|
+
This is the @value{EDITION} Edition, @value{UPDATED}
|
89
|
+
@c Copyright (C) 2007 ...
|
90
|
+
|
91
|
+
@c @node GNU Emacs
|
92
|
+
@c @chapter Using @code{ruby-debug} from GNU Emacs
|
93
|
+
|
94
|
+
|
95
|
+
@cindex @value{Emacs}
|
96
|
+
A special interface which comes with Ruby that allows you to use
|
97
|
+
@value{Emacs} to view (and edit) the source files for the program you
|
98
|
+
are debugging with @value{DBG}. However you must be using at least
|
99
|
+
version 21 of @value{Emacs}, but with @value{Emacs} version 22 or 23
|
100
|
+
there are even more debugging features available. @code{M-x
|
101
|
+
show-emacs-version} inside @value{Emacs} will tell you what version you
|
102
|
+
are running.
|
103
|
+
|
104
|
+
This package provide a full-fledged debugging environment, on par with
|
105
|
+
modern integrated development environments. Once the debugger has been
|
106
|
+
activated, the Emacs frame is divided into a number of dedicated
|
107
|
+
debugger windows.@footnote{If you are an @value{Emacs} traditionalist,
|
108
|
+
you can, of course, run this package with only a shell and source
|
109
|
+
buffer}
|
110
|
+
|
111
|
+
This package comes with a number of predefined window layouts. It is
|
112
|
+
fully customizable so you can create your own.
|
113
|
+
|
114
|
+
@c -------------------------------------------------------------------
|
115
|
+
|
116
|
+
|
117
|
+
@node Getting started, The Multi-window Mode, Top, Top
|
118
|
+
@chapter Getting started
|
119
|
+
|
120
|
+
@menu
|
121
|
+
* Installation:: How to install this package
|
122
|
+
* Emacs rdebug:: Invoke the ruby debugger initially
|
123
|
+
* Emacs shell tracking mode:: Entering rdebug from an existing shell buffer
|
124
|
+
* Configurating this package:: Introducing the configure system
|
125
|
+
@end menu
|
126
|
+
|
127
|
+
@node Installation, Emacs rdebug, Getting started, Getting started
|
128
|
+
@section Installation
|
129
|
+
|
130
|
+
To use this interface, load the file @code{rdebug.el}. This file is a
|
131
|
+
light-weight file, basically it only contains a handful of
|
132
|
+
@code{autoload} directives.
|
133
|
+
|
134
|
+
For example, you can place the following in your @code{~/.emacs} file:
|
135
|
+
|
136
|
+
@smallexample
|
137
|
+
(require 'rdebug)
|
138
|
+
@end smallexample
|
139
|
+
|
140
|
+
In addition, you must have Ruby and ruby-debug installed.
|
141
|
+
|
142
|
+
|
143
|
+
@node Emacs rdebug, Emacs shell tracking mode, Installation, Getting started
|
144
|
+
@section Emacs rdebug
|
145
|
+
|
146
|
+
Use the command @kbd{M-x rdebug} in @sc{gnu} Emacs to start debugging.
|
147
|
+
Give the executable file you want to debug as an argument. Make sure
|
148
|
+
to use the version that comes with this package as this is newer than
|
149
|
+
that supplied with @value{Emacs}.
|
150
|
+
|
151
|
+
The @kbd{rdebug} command starts @value{DBG} as a subprocess of Emacs,
|
152
|
+
with input and output through a newly created Emacs buffer.
|
153
|
+
|
154
|
+
Using @value{DBG} under Emacs is just like using @value{DBG}
|
155
|
+
normally except for two things:
|
156
|
+
|
157
|
+
@itemize @bullet
|
158
|
+
@item
|
159
|
+
All ``terminal'' input and output goes through the GNU Emacs buffer.
|
160
|
+
@end itemize
|
161
|
+
|
162
|
+
This applies both to @value{DBG} commands and their output, and to the input
|
163
|
+
and output done by the program you are debugging.
|
164
|
+
|
165
|
+
This is useful because it means that you can copy the text of previous
|
166
|
+
commands and input them again; you can even use parts of the output
|
167
|
+
in this way.
|
168
|
+
|
169
|
+
All the facilities of GNU Emacs' Shell mode are available for interacting
|
170
|
+
with your script. In particular, you can send signals the usual
|
171
|
+
way---for example, @kbd{C-c C-c} for an interrupt, @kbd{C-c C-z} for a
|
172
|
+
stop.
|
173
|
+
|
174
|
+
@node Emacs shell tracking mode, Configurating this package, Emacs rdebug, Getting started
|
175
|
+
@section Entering rdebug from an existing shell buffer
|
176
|
+
|
177
|
+
Many times it's not feasible to enter the debugger from the outset.
|
178
|
+
Instead a call to the debugger is put inside the program.
|
179
|
+
|
180
|
+
@c See @xref{Unit Testing Session}.
|
181
|
+
|
182
|
+
It is also possible in GNU emacs to use a (``comint'') shell and set a
|
183
|
+
mode to watch for @value{DBG} prompts and track the source code in
|
184
|
+
another window. @xref{Interactive Shell, , Shell, Emacs, The @value{Emacs}
|
185
|
+
Manual}.
|
186
|
+
|
187
|
+
To enable, this run @kbd{M-x turn-on-rdebug-track-mode}. There is some
|
188
|
+
overhead involved in scanning output, so if you are not debugging Ruby
|
189
|
+
programs you probably want to turn this off which can be done via the
|
190
|
+
@code{M-x turn-off-rdebugtrack} command.
|
191
|
+
|
192
|
+
|
193
|
+
@node Configurating this package, , Emacs shell tracking mode, Getting started
|
194
|
+
@section Configurating this package
|
195
|
+
|
196
|
+
In this manual we present a number of @value{Emacs} lisp variables and
|
197
|
+
functions that you can use to configure the debugger interface. In
|
198
|
+
addition, you can use the @value{Emacs} @emph{customize} system, see the
|
199
|
+
@kbd{<menu-bar> <debugger> <options> <customize>} menu item.
|
200
|
+
|
201
|
+
@c -------------------------------------------------------------------
|
202
|
+
|
203
|
+
@node The Multi-window Mode, Debugger Buffers, Getting started, Top
|
204
|
+
@chapter Multi-window
|
205
|
+
|
206
|
+
In the multi-window debugger mode, a number of buffers are visible when
|
207
|
+
the debugger starts. This chapter will describe each of them, in
|
208
|
+
addition it will describe the features associated with the multi-window
|
209
|
+
mode.
|
210
|
+
|
211
|
+
The default multi-window layout looks like the following:
|
212
|
+
|
213
|
+
@verbatim
|
214
|
+
+----------------------------------------------------------------------+
|
215
|
+
| Toolbar |
|
216
|
+
+-----------------------------------+----------------------------------+
|
217
|
+
| | |
|
218
|
+
| Debugger shell | Variables buffer |
|
219
|
+
| | |
|
220
|
+
+-----------------------------------+----------------------------------+
|
221
|
+
| | |
|
222
|
+
| Source buffer | Output buffer |
|
223
|
+
| | |
|
224
|
+
+-----------------------------------+----------------------------------+
|
225
|
+
| | |
|
226
|
+
| Stack buffer | Breakpoints buffer |
|
227
|
+
| | |
|
228
|
+
+-----------------------------------+----------------------------------+
|
229
|
+
@end verbatim
|
230
|
+
|
231
|
+
@section Activating Multi-window mode
|
232
|
+
|
233
|
+
The variable @code{rdebug-many-windows} controls if multi-window mode
|
234
|
+
should be used, it is enabled by default. When starting the debugger
|
235
|
+
using the @code{M-x rdebug} mode the command line option @code{--emacs
|
236
|
+
3} must be specified (this is also the default).
|
237
|
+
|
238
|
+
When attaching to an already running debugger process, you must give the
|
239
|
+
debugger command @kbd{set annotate 3}.
|
240
|
+
|
241
|
+
@section Window Layouts
|
242
|
+
|
243
|
+
When the debugger is started, the original window layout of
|
244
|
+
@value{Emacs} is replaced with the window layout of the debugger. You
|
245
|
+
can switch back and forth between the original window layout and the
|
246
|
+
debugger layout using
|
247
|
+
@kbd{M-x rdebug-display-original-window-configuration} and
|
248
|
+
@kbd{M-x rdebug-display-debugger-window-configuration}.
|
249
|
+
|
250
|
+
If, for some reason, the debugger layout has been garbled you can
|
251
|
+
restore it to the original state using @kbd{M-x
|
252
|
+
rdebug-restore-debugger-window-layout}.
|
253
|
+
|
254
|
+
The debugger provides a number of different window layouts. The easies
|
255
|
+
way to try them out is to use the menu @kbd{<menu-bar> <debugger>
|
256
|
+
<layout>} and select any in the section starting with @code{Standard}.
|
257
|
+
|
258
|
+
|
259
|
+
@section The buffers
|
260
|
+
|
261
|
+
All buffers in this section share a set of commands for common debugger
|
262
|
+
operations and for switching between buffers. In addition, each buffer
|
263
|
+
has got a set of dedicated commands.
|
264
|
+
|
265
|
+
All debugger buffers, with the exception of source and the debugger
|
266
|
+
shell window, are called @emph{secondary buffers}.
|
267
|
+
|
268
|
+
@subsection Keybindings for all Debugger Windows
|
269
|
+
|
270
|
+
The debugger provides key-bindings that work in all debugger windows,
|
271
|
+
including Ruby source buffers. The key bindings are designed to match
|
272
|
+
keys of commonly used debugger environments.
|
273
|
+
|
274
|
+
The variable @code{rdebug-populate-common-keys-function} can be assigned
|
275
|
+
to a function that should bind the keys use. Three functions are
|
276
|
+
provided @code{rdebug-populate-common-keys-standard},
|
277
|
+
@code{...-eclipse}, and @code{...-netbeans}.
|
278
|
+
|
279
|
+
@multitable @columnfractions 0.4 0.2 0.2 0.2
|
280
|
+
@headitem Command @tab Standard @tab Eclipse @tab Netbeans
|
281
|
+
@item Run @tab f5 @tab @tab
|
282
|
+
@item Quit @tab S-f5 @tab @tab
|
283
|
+
@item Toggle Breakpoint @tab f9 @tab @tab
|
284
|
+
@item Enable/Disable Breakpoint @tab C-f9 @tab S-C-b @tab S-f8
|
285
|
+
@item Step over @tab f10 @tab f6 @tab f8
|
286
|
+
@item Step into @tab f11 @tab f5 @tab f7
|
287
|
+
@item Step out @tab S-f11 @tab f7 @tab M-S-f7
|
288
|
+
|
289
|
+
@end multitable
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
@subsection Keybindings for Secondary Buffers
|
294
|
+
|
295
|
+
The following commands are available in all secondary windows.
|
296
|
+
|
297
|
+
Capital letters move between secondary buffers as mentioned above (jump
|
298
|
+
to if visible or replace a secondary if not).
|
299
|
+
|
300
|
+
@table @kbd
|
301
|
+
@item SPACE
|
302
|
+
step (edebug compatible)
|
303
|
+
@item <
|
304
|
+
Up in the stack trace
|
305
|
+
@item >
|
306
|
+
Down in the stack trace
|
307
|
+
@item ?
|
308
|
+
Help
|
309
|
+
@item B
|
310
|
+
Display breakpoints buffer
|
311
|
+
@item C
|
312
|
+
Display command buffer
|
313
|
+
@item O
|
314
|
+
Display program output
|
315
|
+
@item S
|
316
|
+
Display source window
|
317
|
+
@item T
|
318
|
+
Display stack trace buffer
|
319
|
+
@item V
|
320
|
+
display variables buffer
|
321
|
+
@item W
|
322
|
+
display watch buffer
|
323
|
+
@item b
|
324
|
+
Set breakpoint
|
325
|
+
@item c
|
326
|
+
Continue (i.e. run)
|
327
|
+
@item d
|
328
|
+
Remove breakpoint
|
329
|
+
@item f
|
330
|
+
Finish (i.e. step out of the current function)
|
331
|
+
@item n
|
332
|
+
Next (i.e. step into function)
|
333
|
+
@item p
|
334
|
+
print
|
335
|
+
@item q
|
336
|
+
Quit
|
337
|
+
@item r
|
338
|
+
Restart
|
339
|
+
@item s
|
340
|
+
Step (i.e. step over function)
|
341
|
+
@end table
|
342
|
+
|
343
|
+
You can use the same commands in the source buffer if you enable
|
344
|
+
@code{rdebug-short-key-mode}. The best way to do this is to add the
|
345
|
+
following to your init file:
|
346
|
+
|
347
|
+
@smallexample
|
348
|
+
(add-hook 'rdebug-mode-hook 'rdebug-turn-on-short-key-mode)
|
349
|
+
@end smallexample
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
@subsection The Debugger Shell Buffer
|
354
|
+
|
355
|
+
The @emph{debugger shell window} is the main communication channel
|
356
|
+
between @value{DBG} and @value{Emacs}. You can use the shell to issue
|
357
|
+
debugger commands directly. In addition, any @value{Emacs} debugger
|
358
|
+
command you issue will be translated into shell commands, and the output
|
359
|
+
will be parsed.
|
360
|
+
|
361
|
+
It is the ambition that the @value{Emacs} debugger interface should be
|
362
|
+
in a state where the debugger shell window would not need to be visible.
|
363
|
+
|
364
|
+
@subsection The Source Buffer
|
365
|
+
|
366
|
+
The @emph{source buffers} (or buffers) contains the actual Ruby source
|
367
|
+
code that is being debugged. A small arrow in the left fringe displays
|
368
|
+
the current line. Active breakpoints are displayed as red dots and
|
369
|
+
passive as grey.
|
370
|
+
|
371
|
+
@subsection The Output Buffer
|
372
|
+
|
373
|
+
The @emph{output buffer} displays any output the debugged program emits.
|
374
|
+
|
375
|
+
The option @code{rdebug-use-separate-io-buffer} controls if the output
|
376
|
+
buffer should be used, or if the output would go into the debugger shell
|
377
|
+
buffer.
|
378
|
+
|
379
|
+
@subsection The Variables Buffer
|
380
|
+
|
381
|
+
In this buffer, local and object variables are displayed. The values of
|
382
|
+
the variables can be edited.
|
383
|
+
|
384
|
+
@table @kbd
|
385
|
+
@item RET
|
386
|
+
Edit the value
|
387
|
+
@item e
|
388
|
+
Print the value
|
389
|
+
@item x
|
390
|
+
Pretty-print the value
|
391
|
+
@end table
|
392
|
+
|
393
|
+
@subsection The Stack Trace Buffer
|
394
|
+
|
395
|
+
The @emph{stack trace} buffer displays the function that is currently
|
396
|
+
being debugger, the function that called it, etc., all the way up to the
|
397
|
+
originally called function.
|
398
|
+
|
399
|
+
You can navigate in the stack trace buffer in order to see the source of
|
400
|
+
any function in the call chain. The Variables buffer will also be
|
401
|
+
updated to reflect the local variables of that function.
|
402
|
+
|
403
|
+
@table @kbd
|
404
|
+
@item RET
|
405
|
+
Select a function to display
|
406
|
+
@item <digits>
|
407
|
+
Go to a stack frame
|
408
|
+
@end table
|
409
|
+
|
410
|
+
@subsection The Watch Buffer
|
411
|
+
|
412
|
+
The @emph{Watch Buffer} can display arbitrary expressions, including,
|
413
|
+
but not limited to, global variables.
|
414
|
+
|
415
|
+
@table @kbd
|
416
|
+
@item a
|
417
|
+
Add a watch expression
|
418
|
+
@item C-d, d
|
419
|
+
Delete a watch expression
|
420
|
+
@item RET, e
|
421
|
+
Edit a watch expression
|
422
|
+
@item <digits>
|
423
|
+
Go to the expression
|
424
|
+
@end table
|
425
|
+
|
426
|
+
@subsection The Breakpoints Buffer
|
427
|
+
|
428
|
+
The @emph{Breakpoints Buffer} displays all breakpoints that currently are
|
429
|
+
defined and shows if they are enabled or disabled.
|
430
|
+
|
431
|
+
@table @kbd
|
432
|
+
@item t
|
433
|
+
Toggle a breakpoint between enabled and disabled
|
434
|
+
@item i
|
435
|
+
Add a breakpoint condition
|
436
|
+
@item ret
|
437
|
+
Goto a breakpoint
|
438
|
+
@item C-d
|
439
|
+
Delete a breakpoint
|
440
|
+
@item <digits>
|
441
|
+
Go to the expression
|
442
|
+
@end table
|
443
|
+
|
444
|
+
@subsection The Help Buffer
|
445
|
+
|
446
|
+
The @emph{Help Buffer} is displayed whenever you press @code{?}. It will
|
447
|
+
display a help text on the available debugger commands and commands to
|
448
|
+
navigate between the buffers.
|
449
|
+
|
450
|
+
|
451
|
+
@c -------------------------------------------------------------------
|
452
|
+
|
453
|
+
@node Debugger Buffers, Emacs Debugger Commands, The Multi-window Mode, Top
|
454
|
+
@chapter Debugger Buffers
|
455
|
+
|
456
|
+
@menu
|
457
|
+
* Debugger Command Buffer::
|
458
|
+
* Emacs Source:: Commands from the source script
|
459
|
+
@end menu
|
460
|
+
|
461
|
+
@node Debugger Command Buffer, Emacs Source, Debugger Buffers, Debugger Buffers
|
462
|
+
@section Emacs Debugger Command buffer
|
463
|
+
|
464
|
+
Each time @value{DBG} displays a stack frame, Emacs automatically finds the
|
465
|
+
source file for that frame and puts an arrow (@samp{=>}) at the
|
466
|
+
left margin of the current line. Emacs uses a separate buffer for
|
467
|
+
source display, and splits the screen to show both your @value{DBG} session
|
468
|
+
and the source.
|
469
|
+
|
470
|
+
Explicit @value{DBG} @code{list} or search commands still produce output as
|
471
|
+
usual, but you probably have no reason to use them from GNU Emacs.
|
472
|
+
|
473
|
+
@quotation
|
474
|
+
@emph{Warning:} If the directory where your script resides is not your
|
475
|
+
current directory, it can be easy to confuse Emacs about the location of
|
476
|
+
the source files, in which case the auxiliary display buffer does not
|
477
|
+
appear to show your source. @value{DBG} can find programs by searching your
|
478
|
+
environment's @code{PATH} variable, so the @value{DBG} input and output
|
479
|
+
session proceeds normally; but Emacs does not get enough information
|
480
|
+
back from @value{DBG} to locate the source files in this situation. To
|
481
|
+
avoid this problem, either start @value{DBG} mode from the directory where
|
482
|
+
your script resides, or specify an absolute file name when prompted for the
|
483
|
+
@kbd{M-x gdb} argument.
|
484
|
+
|
485
|
+
A similar confusion can result if you use the @value{DBG} @code{file} command to
|
486
|
+
switch to debugging a program in some other location, from an existing
|
487
|
+
@value{DBG} buffer in Emacs.
|
488
|
+
@end quotation
|
489
|
+
|
490
|
+
@noindent
|
491
|
+
(preceded by @kbd{M-:} or @kbd{ESC :}, or typed in the @code{*scratch*} buffer, or
|
492
|
+
in your @file{.emacs} file).
|
493
|
+
|
494
|
+
In the @value{DBG} I/O buffer, you can use the Emacs commands listed
|
495
|
+
below in addition to the standard Shell mode commands. The I/O buffer
|
496
|
+
name name is usually @code{*gud-}@emph{script-name}@code{*}, where
|
497
|
+
@emph{script-name} is the name of the script you are debugging.
|
498
|
+
|
499
|
+
Many of the commands listed below are also bound to a second key
|
500
|
+
sequence which also can be used in the also be used in the source
|
501
|
+
script. These are listed in @ref{Emacs Source}.
|
502
|
+
|
503
|
+
In secondary buffers many commands are available the corresponding
|
504
|
+
final keystroke. For example @code{C-c n} in a secondary buffer is
|
505
|
+
@code{n}.
|
506
|
+
|
507
|
+
@table @kbd
|
508
|
+
@item C-h m
|
509
|
+
Describe the features of Emacs' @value{DBG} Mode.
|
510
|
+
|
511
|
+
@item C-x C-a C-b (gud-break)
|
512
|
+
@pindex C-x C-a C-b (gud-break)
|
513
|
+
Set breakpoint at current line.
|
514
|
+
|
515
|
+
@item C-x C-a C-d (gud-remove)
|
516
|
+
@pindex C-x C-a C-d (gud-remove)
|
517
|
+
Remove breakpoint at current line.
|
518
|
+
|
519
|
+
@item C-x C-a C-l (gud-refresh)
|
520
|
+
@pindex C-x C-a C-d (gud-refresh)
|
521
|
+
Fix up a possibly garbled display, and redraw the arrow.
|
522
|
+
|
523
|
+
@item C-c RET (comint-copy-old-input)
|
524
|
+
@pindex C-c RET (comint-copy-old-input)
|
525
|
+
Insert after prompt old input at point as new input to be edited.
|
526
|
+
Calls `comint-get-old-input' to get old input.
|
527
|
+
|
528
|
+
@item C-c n (gud-next)
|
529
|
+
@pindex C-c n (gud-next)
|
530
|
+
Step one line, skipping functions. (Step over).
|
531
|
+
|
532
|
+
@item C-x C-a C-o (comint-delete-output)
|
533
|
+
@pindex C-c n (comint-delete-output)
|
534
|
+
Delete all output from interpreter since last input. Does not delete
|
535
|
+
the prompt.
|
536
|
+
|
537
|
+
@item C-x C-a C-r (gud-cont)
|
538
|
+
|
539
|
+
@item C-c SPC (gud-step @var{arg})
|
540
|
+
@pindex C-c SPC (gud-step @var{arg})
|
541
|
+
@itemx C-x C-a C-s (gud-step @var{arg})
|
542
|
+
@pindex C-x C-a C-s (gud-step @var{arg})
|
543
|
+
Step one source line. Same as @value{DBG} @code{step} command. The
|
544
|
+
@value{Emacs} command name is @code{gud-step} and @code{C-x C-a C-s}
|
545
|
+
is an alternate binding which can be used in the source
|
546
|
+
script.
|
547
|
+
@c @xref{Step}.
|
548
|
+
|
549
|
+
With a numeric argument, run that many times.
|
550
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs}
|
551
|
+
Manual}.
|
552
|
+
|
553
|
+
|
554
|
+
@item C-x C-a C-t (gud-tbreak @var{arg})
|
555
|
+
Set temporary breakpoint at current line.
|
556
|
+
|
557
|
+
@item C-x C-a C-w (backward-kill-word)
|
558
|
+
@item C-x C-a C-x (comint-get-next-from-history)
|
559
|
+
@item C-x C-a C-z (comint-stop-subjob)
|
560
|
+
Stop the current subjob.
|
561
|
+
This command also kills the pending input
|
562
|
+
between the process mark and point.
|
563
|
+
|
564
|
+
WARNING: if there is no current subjob, you can end up suspending
|
565
|
+
the top-level process running in the buffer. If you accidentally do
|
566
|
+
this, use M-x comint-continue-subjob to resume the process. (This
|
567
|
+
is not a problem with most shells, since they ignore this signal.)
|
568
|
+
|
569
|
+
@item C-x C-a C-\ (comint-quit-subjob)
|
570
|
+
Send quit signal to the current subjob.
|
571
|
+
This command also kills the pending input
|
572
|
+
between the process mark and point.
|
573
|
+
|
574
|
+
@item C-c + (gud-step-plus)
|
575
|
+
Run @code{step+}.
|
576
|
+
|
577
|
+
@item C-c . (comint-insert-previous-argument @var{index})
|
578
|
+
Insert the @emph{index-th} argument from the previous Comint command-line at point.
|
579
|
+
Spaces are added at beginning and/or end of the inserted string if
|
580
|
+
necessary to ensure that it's separated from adjacent arguments.
|
581
|
+
Interactively, if no prefix argument is given, the last argument is inserted.
|
582
|
+
Repeated interactive invocations will cycle through the same argument
|
583
|
+
from progressively earlier commands (using the value of index specified
|
584
|
+
with the first command).
|
585
|
+
|
586
|
+
@item C-c < (gud-up)
|
587
|
+
Go up a stack frame. With a numeric argument, go up that many
|
588
|
+
stack frames. Same @value{DBG} @code{up} command.
|
589
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs}
|
590
|
+
Manual}.
|
591
|
+
|
592
|
+
@item C-c > (gud-down)
|
593
|
+
Go down a stack frame. Same as @value{DBG} @code{down}.
|
594
|
+
With a numeric argument, go down that many stack frames.
|
595
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs}
|
596
|
+
Manual}.
|
597
|
+
|
598
|
+
@item C-c ? (rdebug-display-secondary-window-help-buffer)
|
599
|
+
Display the rdebug help buffer.
|
600
|
+
|
601
|
+
@item C-c B (rdebug-display-breakpoints-buffer)
|
602
|
+
Display the rdebug breakpoints buffer.
|
603
|
+
|
604
|
+
@item C-x C-a C (rdebug-display-cmd-buffer)
|
605
|
+
Display the rdebug command buffer.
|
606
|
+
|
607
|
+
@item C-c O (rdebug-display-output-buffer)
|
608
|
+
Display the rdebug output buffer.
|
609
|
+
|
610
|
+
@item C-c R (gud-run)
|
611
|
+
@itemx C-c r (gud run)
|
612
|
+
Restart or run the script. Same as @value{DBG} @code{run} command.
|
613
|
+
|
614
|
+
@item C-c S (gud-source-resync)
|
615
|
+
@item C-c T (rdebug-display-stack-buffer)
|
616
|
+
Display the rdebug stack buffer.
|
617
|
+
@item C-c V (rdebug-display-variables-buffer)
|
618
|
+
Display the rdebug variables buffer.
|
619
|
+
|
620
|
+
@item C-c W (rdebug-display-watch-buffer)
|
621
|
+
Display the rdebug watch buffer.
|
622
|
+
|
623
|
+
@item C-c f (gud-finish @var{arg})
|
624
|
+
@pindex C-c f (gud-finish @var{arg})
|
625
|
+
Finish executing current function.
|
626
|
+
|
627
|
+
@itemx C-x C-a C-f (gud-finish)
|
628
|
+
@pindex C-x C-a C-f (gud-finish)
|
629
|
+
Finish executing current function. The same as @value{DBG}
|
630
|
+
@code{finish} command.
|
631
|
+
@c @xref{Finish}.
|
632
|
+
|
633
|
+
@item C-c n (gud-next)
|
634
|
+
@pindex C-c n (gud-next)
|
635
|
+
Execute to next source line in this function, skipping all function
|
636
|
+
calls. Same as @value{DBG} @code{next} command.
|
637
|
+
@c @xref{Next}.
|
638
|
+
|
639
|
+
With a numeric argument, run that many times.
|
640
|
+
@c @xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs} Manual}.
|
641
|
+
|
642
|
+
@item C-c q (gud-quit)
|
643
|
+
|
644
|
+
@item C-x C-a C-l
|
645
|
+
Resynchronize the current position with the source window. The
|
646
|
+
@value{Emacs} command name is @code{gud-refresh} and @code{C-x C-a
|
647
|
+
C-l} is an alternate binding which also can be used in the source script.
|
648
|
+
|
649
|
+
@item C-c a
|
650
|
+
Shows argument variables (e.g.@: @code{$1}, @code{$2}) of the current
|
651
|
+
stack frame. Same as @value{DBG} @code{info args} command. The
|
652
|
+
@value{Emacs} command name is @code{gud-args} and @code{C-x C-a a} is
|
653
|
+
an alternate binding which also can be used in the source script.
|
654
|
+
|
655
|
+
@item C-c T
|
656
|
+
Show stack trace. Same as @value{DBG} @code{where} command. The
|
657
|
+
@value{Emacs} command name is @code{gud-where} and @code{C-x C-a T} is
|
658
|
+
an alternate binding which can be used in the source
|
659
|
+
script.
|
660
|
+
@c @xref{Backtrace}.
|
661
|
+
|
662
|
+
@end table
|
663
|
+
|
664
|
+
In any source file, the Emacs command @kbd{C-x SPC} (@code{gud-break})
|
665
|
+
tells @value{DBG} to set a breakpoint on the source line point is on.
|
666
|
+
|
667
|
+
If you accidentally delete the source-display buffer, an easy way to get
|
668
|
+
it back is to type the command @code{frame} in the @value{DBG} buffer, to
|
669
|
+
request a frame display; when you run under Emacs, this recreates
|
670
|
+
the source buffer if necessary to show you the context of the current
|
671
|
+
frame.
|
672
|
+
|
673
|
+
The source files displayed in Emacs are in ordinary Emacs buffers
|
674
|
+
which are visiting the source files in the usual way. You can edit
|
675
|
+
the files with these buffers if you wish; but keep in mind that @value{DBG}
|
676
|
+
communicates with Emacs in terms of line numbers. If you add or
|
677
|
+
delete lines from the text, the line numbers that @value{DBG} knows cease
|
678
|
+
to correspond properly with the code.
|
679
|
+
|
680
|
+
@xref{Debugger Operation, , , Emacs, The @value{Emacs}
|
681
|
+
Manual}.
|
682
|
+
|
683
|
+
@node Emacs Source, , Debugger Command Buffer, Debugger Buffers
|
684
|
+
@section Commands from the source script
|
685
|
+
|
686
|
+
@table @kbd
|
687
|
+
@item C-x SPC
|
688
|
+
|
689
|
+
tells @value{DBG} to set a breakpoint on the source
|
690
|
+
line point is on. (@code{gud-break})
|
691
|
+
|
692
|
+
@item C-x C-a t
|
693
|
+
|
694
|
+
@code{gud-linetrace}
|
695
|
+
|
696
|
+
@item C-x C-a C-f
|
697
|
+
Restart or run the script. Same as @value{DBG} @code{run} command. The
|
698
|
+
@value{Emacs} command name is @code{gud-finish}. In the corresponding
|
699
|
+
I/O buffer, @code{C-c R} is an alternate binding.
|
700
|
+
|
701
|
+
@item C-x C-a T
|
702
|
+
Show stack trace. Same as @value{DBG} @code{where} command. In the
|
703
|
+
corresponding I/O buffer, @code{C-c T} is an alternate
|
704
|
+
binding.
|
705
|
+
@c @xref{Backtrace}.
|
706
|
+
|
707
|
+
@item C-x C-a <
|
708
|
+
|
709
|
+
Go up a stack frame. With a numeric argument, go up that many
|
710
|
+
stack frames. Same @value{DBG} @code{up} command.
|
711
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs} Manual}.
|
712
|
+
|
713
|
+
The @value{Emacs} command name is @code{gud-up}. In the corresponding
|
714
|
+
I/O buffer, @code{C-c <} is an alternate binding.
|
715
|
+
|
716
|
+
@item C-x C-a >
|
717
|
+
|
718
|
+
Go down a stack frame. Same as @value{DBG} @code{down}.
|
719
|
+
With a numeric argument, go down that many stack frames.
|
720
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs}
|
721
|
+
Manual}.
|
722
|
+
|
723
|
+
The @value{Emacs} command name is @code{gud-down}. In the
|
724
|
+
corresponding I/O buffer, @code{C-c >} is an alternate binding.
|
725
|
+
|
726
|
+
@item C-x C-a C-t
|
727
|
+
|
728
|
+
@code{gud-tbreak}
|
729
|
+
|
730
|
+
@item C-x C-a C-s
|
731
|
+
|
732
|
+
Step one source line. Same as @value{DBG} @code{step}
|
733
|
+
command.
|
734
|
+
@c @xref{Step}.
|
735
|
+
|
736
|
+
With a numeric argument, run that many times.
|
737
|
+
@xref{Arguments, , Numeric Arguments, Emacs, The @value{Emacs}
|
738
|
+
Manual}.
|
739
|
+
|
740
|
+
The @value{Emacs} command name is @code{gud-step}. In the
|
741
|
+
corresponding I/O buffer, @code{C-x C-a C-s} is an alternate binding.
|
742
|
+
|
743
|
+
@item C-x C-a C-e
|
744
|
+
|
745
|
+
@code{gud-statement}
|
746
|
+
|
747
|
+
@item C-x C-a R
|
748
|
+
Restart or run the script. Same as @value{DBG} @code{run} command. The
|
749
|
+
@value{Emacs} command name is @code{gud-run}. In the corresponding I/O
|
750
|
+
buffer, @code{C-c R} is an alternate binding.
|
751
|
+
|
752
|
+
@item C-x C-a C-d
|
753
|
+
Delete breakpoint. @code{gud-remove}
|
754
|
+
|
755
|
+
@item C-x C-a C-p
|
756
|
+
|
757
|
+
@code{gud-print}
|
758
|
+
|
759
|
+
@item C-x C-a C-n
|
760
|
+
|
761
|
+
Execute to next source line in this function, skipping all function
|
762
|
+
calls. Same as @value{DBG} @code{next} command. With a numeric
|
763
|
+
argument, run that many times. @xref{Arguments, , Numeric Arguments,
|
764
|
+
Emacs, The @value{Emacs} Manual}.
|
765
|
+
|
766
|
+
The @value{Emacs} command name is @code{gud-next}. In the
|
767
|
+
corresponding I/O buffer, @code{C-x C-a C-n} is an alternate binding.
|
768
|
+
|
769
|
+
@item C-x C-a f C-f
|
770
|
+
|
771
|
+
@code{gud-finish}
|
772
|
+
|
773
|
+
@item C-x C-a C-r
|
774
|
+
Continue execution of your script Same as @value{DBG} @code{continue}
|
775
|
+
command. The @value{Emacs} command name is @code{gud-cont}. In the
|
776
|
+
corresponding I/O buffer, @code{C-x C-a C-r} is an alternate binding.
|
777
|
+
@c See @ref{Continue}.
|
778
|
+
|
779
|
+
@item C-x C-a C-b
|
780
|
+
|
781
|
+
@code{gud-break}
|
782
|
+
|
783
|
+
@item C-x C-a a
|
784
|
+
|
785
|
+
@code{gud-args}
|
786
|
+
Shows argument variables (e.g.@: @code{$1}, @code{$2}) of the current
|
787
|
+
stack frame. Same as @value{DBG} @code{info args} command. The
|
788
|
+
@value{Emacs} command name is @code{gud-args}. In the corresponding
|
789
|
+
I/O buffer, @code{C-c a} is an alternate binding which also can be
|
790
|
+
used in the source script.
|
791
|
+
|
792
|
+
@item C-x C-a C-l
|
793
|
+
Move to current position in this source window. The @value{Emacs}
|
794
|
+
command name is @code{gud-refresh}. In the corresponding I/O buffer,
|
795
|
+
@code{C-x C-a C-l} is an alternate binding.
|
796
|
+
|
797
|
+
@end table
|
798
|
+
|
799
|
+
@node Emacs Debugger Commands, Emacs Command Index, Debugger Buffers, Top
|
800
|
+
@chapter Emacs Debugger Commands
|
801
|
+
|
802
|
+
@menu
|
803
|
+
* Emacs Debugger Common Commands::
|
804
|
+
* Emacs Debugger Breakpoint Buffer Commands::
|
805
|
+
* Emacs Debugger Stack Buffer Commands::
|
806
|
+
* Emacs Debugger Variable Buffer Commands::
|
807
|
+
* Emacs Debugger Watch Buffer Commands::
|
808
|
+
* Emacs GUD Commands::
|
809
|
+
@end menu
|
810
|
+
|
811
|
+
@node Emacs Debugger Common Commands, Emacs Debugger Breakpoint Buffer Commands, Emacs Debugger Commands, Emacs Debugger Commands
|
812
|
+
@section Emacs Debugger Common Commands
|
813
|
+
|
814
|
+
The commands in this section are used to make a secondary buffer
|
815
|
+
visible. If the buffer doesn't exist, nothing is done.
|
816
|
+
The way the buffer is made visible is follows the following
|
817
|
+
rules tried in order:
|
818
|
+
|
819
|
+
@enumerate
|
820
|
+
@item
|
821
|
+
If the buffer doesn't exist, do nothing.
|
822
|
+
@item
|
823
|
+
If the buffer is already displayed, switch to it.
|
824
|
+
@item
|
825
|
+
If the current buffer is a
|
826
|
+
secondary buffer, bury it replacing with the requested
|
827
|
+
buffer.
|
828
|
+
@item
|
829
|
+
If there is secondary buffer visible, that
|
830
|
+
is replaced instead.
|
831
|
+
@item
|
832
|
+
Just pick a visible buffer to bury and replace.
|
833
|
+
@end enumerate
|
834
|
+
|
835
|
+
The commands are also have key bindings that end in an uppercase
|
836
|
+
letter. This letter is given in parenthesis. When in one of the
|
837
|
+
secondary buffers, the uppercase letter is bound to the command as well.
|
838
|
+
|
839
|
+
@table @kbd
|
840
|
+
|
841
|
+
@item (rdebug-display-breakpoints-buffer) (@kbd{B})
|
842
|
+
@findex rdebug-display-breakpoints-buffer (@kbd{B})
|
843
|
+
Display the rdebug breakpoints buffer. Bound to: @kbd{C-x C-a B},
|
844
|
+
@kbd{<menu-bar> <debugger> <view> <breakpoints>}. Secondary buffers:
|
845
|
+
@kbd{O}.
|
846
|
+
|
847
|
+
@item (rdebug-display-cmd-buffer) (@kbd{C})
|
848
|
+
@findex rdebug-display-cmd-buffer (@kbd{C})
|
849
|
+
Display the debugger command buffer.
|
850
|
+
|
851
|
+
Bound to: @kbd{C-x C-a C}, @kbd{<menu-bar> <debugger> <view> <shell>}.
|
852
|
+
|
853
|
+
@item (rdebug-display-output-buffer) (@kbd{O})
|
854
|
+
@findex rdebug-display-output-buffer (@kbd{?})
|
855
|
+
Display the debugger output buffer.
|
856
|
+
|
857
|
+
Bound to: @kbd{C-x C-a O}, @kbd{<menu-bar> <debugger> <view>
|
858
|
+
<output>}. Secondary buffers: @kbd{O}.
|
859
|
+
|
860
|
+
@item (rdebug-display-secondary-window-help-buffer) (@kbd{?})
|
861
|
+
@findex rdebug-display-secondary-window-help-buffer (@kbd{?})
|
862
|
+
|
863
|
+
@item (rdebug-display-stack-buffer) (@kbd{T})
|
864
|
+
@findex rdebug-display-stack-buffer (@kbd{T})
|
865
|
+
Display the debugger stack buffer. Bound to: @kbd{C-x C-a T},
|
866
|
+
@kbd{<menu-bar> <debugger> <view> <stack>}. Secondary buffers: @kbd{T}.
|
867
|
+
|
868
|
+
@item (rdebug-display-variables-buffer) (@kbd{V})
|
869
|
+
@findex rdebug-display-variables-buffer (@kbd{V})
|
870
|
+
Display the debugger variables buffer. Bound to: @kbd{C-x C-a V},
|
871
|
+
@kbd{<menu-bar> <debugger> <view> <variables>}. Secondary buffers:
|
872
|
+
@kbd{V}.
|
873
|
+
|
874
|
+
@item (rdebug-display-watch-buffer) (@kbd{W})
|
875
|
+
@findex rdebug-display-watch-buffer (@kbd{W})
|
876
|
+
Display the debugger variables buffer. Bound to: @kbd{C-x C-a W},
|
877
|
+
@kbd{<menu-bar> <debugger> <view> <watch>}. Secondary buffers: @kbd{V}.
|
878
|
+
|
879
|
+
@item (rdebug-display-debugger-window-configuration)
|
880
|
+
@findex rdebug-display-debugger-window-configuration
|
881
|
+
Display the current layout of windows of the rdebug Ruby debugger.
|
882
|
+
@item (rdebug-display-original-window-configuration)
|
883
|
+
@findex rdebug-display-original-window-configuration
|
884
|
+
Display the layout of windows prior to starting the rdebug Ruby
|
885
|
+
debugger. This function is called upon quitting the debugger and
|
886
|
+
@var{rdebug-many-windows} is not nil.
|
887
|
+
@item (rdebug-goto-entry-n)
|
888
|
+
@findex rdebug-goto-entry-n
|
889
|
+
Breakpoints, Display expressions and Stack Frames all have
|
890
|
+
numbers associated with them which are distinct from line
|
891
|
+
numbers. In a secondary buffer, this function is usually bound to
|
892
|
+
a numeric key. which will position you at that entry number. To
|
893
|
+
go to an entry above 9, just keep entering the number. For
|
894
|
+
example, if you press 1 and then 9, you should jump to entry
|
895
|
+
1 (if it exists) and then 19 (if that exists). Entering any
|
896
|
+
non-digit will start entry number from the beginning again.
|
897
|
+
@item (rdebug-quit) - q
|
898
|
+
@findex rdebug-quit (q)
|
899
|
+
Kill the debugger process associated with the buffer.
|
900
|
+
|
901
|
+
When @var{rdebug-many-windows} is active, the original window layout is
|
902
|
+
restored.
|
903
|
+
@item (rdebug-restore-windows)
|
904
|
+
@findex rdebug-restore-windows
|
905
|
+
Display the initial ruby debugger window layout.
|
906
|
+
|
907
|
+
@end table
|
908
|
+
|
909
|
+
|
910
|
+
@node Emacs Debugger Breakpoint Buffer Commands, Emacs Debugger Stack Buffer Commands, Emacs Debugger Common Commands, Emacs Debugger Commands
|
911
|
+
@section Emacs Debugger Breakpoint Buffer Commands
|
912
|
+
|
913
|
+
@table @kbd
|
914
|
+
@item (rdebug-goto-breakpoint)
|
915
|
+
@findex rdebug-goto-breakpoint
|
916
|
+
@item (rdebug-goto-breakpoint-mouse)
|
917
|
+
@findex rdebug-goto-breakpoint-mouse
|
918
|
+
@item (rdebug-breakpoints-mode)
|
919
|
+
@findex rdebug-breakpoints-mode
|
920
|
+
Major mode for displaying breakpoints in a secondary window. Uses
|
921
|
+
@var{rdebug-breakpoints-mode-map}.
|
922
|
+
@end table
|
923
|
+
|
924
|
+
@node Emacs Debugger Stack Buffer Commands, Emacs Debugger Variable Buffer Commands, Emacs Debugger Breakpoint Buffer Commands, Emacs Debugger Commands
|
925
|
+
@section Emacs Debugger Stack Buffer Commands
|
926
|
+
|
927
|
+
@table @kbd
|
928
|
+
@item (rdebug-goto-stack-frame)
|
929
|
+
@findex rdebug-goto-stack-frame
|
930
|
+
@item (rdebug-frames-mode)
|
931
|
+
@findex rdebug-frames-mode
|
932
|
+
Major mode for displaying the stack trace. Uses
|
933
|
+
@var{rdebug-frames-mode-map}.
|
934
|
+
@end table
|
935
|
+
|
936
|
+
@node Emacs Debugger Variable Buffer Commands, Emacs Debugger Watch Buffer Commands, Emacs Debugger Stack Buffer Commands, Emacs Debugger Commands
|
937
|
+
@section Emacs Debugger Variable Buffer Commands
|
938
|
+
|
939
|
+
@table @kbd
|
940
|
+
@item (rdebug-variables-edit)
|
941
|
+
@findex rdebug-variables-edit
|
942
|
+
@end table
|
943
|
+
|
944
|
+
@node Emacs Debugger Watch Buffer Commands, Emacs GUD Commands, Emacs Debugger Variable Buffer Commands, Emacs Debugger Commands
|
945
|
+
@section Emacs Debugger Watch Buffer Commands
|
946
|
+
|
947
|
+
@table @kbd
|
948
|
+
@item (rdebug-watch-add)
|
949
|
+
@findex rdebug-watch-add
|
950
|
+
Add a display expression.
|
951
|
+
@item (rdebug-watch-delete)
|
952
|
+
@findex rdebug-watch-delete
|
953
|
+
Delete a display expression.
|
954
|
+
@item (rdebug-watch-edit)
|
955
|
+
@findex rdebug-watch-edit
|
956
|
+
Edit a display expression.
|
957
|
+
@item (rdebug-watch-mode)
|
958
|
+
@findex rdebug-watch-mode
|
959
|
+
Major mode for displaying the display expressions. Uses
|
960
|
+
@var{rdebug-watch-mode-map}.
|
961
|
+
@end table
|
962
|
+
|
963
|
+
@node Emacs GUD Commands, , Emacs Debugger Watch Buffer Commands, Emacs Debugger Commands
|
964
|
+
@section Emacs Debugger GUD Commands
|
965
|
+
|
966
|
+
@table @kbd
|
967
|
+
@item (comint-copy-old-input)
|
968
|
+
@findex comint-copy-old-input
|
969
|
+
Insert after prompt old input at point as new input to be edited.
|
970
|
+
Calls `comint-get-old-input' to get old input.
|
971
|
+
@item (comint-delete-output)
|
972
|
+
@findex comint-delete-output
|
973
|
+
Delete all output from interpreter since last input.
|
974
|
+
Does not delete the prompt.
|
975
|
+
@item (gud-break)
|
976
|
+
@findex gud-break
|
977
|
+
Set a breakpoint on the source line point is on.
|
978
|
+
@item (gud-cont) - c
|
979
|
+
@findex gud-cont (c)
|
980
|
+
Continue execution.
|
981
|
+
@item (gud-next) - n
|
982
|
+
@findex gud-next (n)
|
983
|
+
Step one line, skipping functions. (Step over).
|
984
|
+
@item (gud-refresh)
|
985
|
+
@findex gud-refresh
|
986
|
+
Fix up a possibly garbled display, and redraw the arrow.
|
987
|
+
@item (gud-remove)
|
988
|
+
@findex gud-remove
|
989
|
+
Remove breakpoint at current line.
|
990
|
+
@item (gud-step) - s
|
991
|
+
@findex gud-step (s)
|
992
|
+
Step one statement. (Step into)
|
993
|
+
@item (gud-step-plus) - +
|
994
|
+
@findex gud-step-plus (+)
|
995
|
+
Run @code{step+}---like @code{gud-step} but ensure we go to a new
|
996
|
+
line.
|
997
|
+
@item (gud-tbreak @var{arg})
|
998
|
+
@findex gud-tbreak
|
999
|
+
Set temporary breakpoint at current line.
|
1000
|
+
@end table
|
1001
|
+
|
1002
|
+
@node Emacs Command Index, Emacs Function Index, Emacs Debugger Commands, Top
|
1003
|
+
@unnumbered Emacs Command Index
|
1004
|
+
@printindex pg
|
1005
|
+
|
1006
|
+
@node Emacs Function Index, Emacs Key Binding Index, Emacs Command Index, Top
|
1007
|
+
@unnumbered Emacs Function Index
|
1008
|
+
@printindex fn
|
1009
|
+
|
1010
|
+
@node Emacs Key Binding Index, , Emacs Function Index, Top
|
1011
|
+
@unnumbered Key Binding Index
|
1012
|
+
@printindex ky
|
1013
|
+
|
1014
|
+
@tex
|
1015
|
+
% I think something like @colophon should be in texinfo. In the
|
1016
|
+
% meantime:
|
1017
|
+
\long\def\colophon{\hbox to0pt{}\vfill
|
1018
|
+
\centerline{The body of this manual is set in}
|
1019
|
+
\centerline{\fontname\tenrm,}
|
1020
|
+
\centerline{with headings in {\bf\fontname\tenbf}}
|
1021
|
+
\centerline{and examples in {\tt\fontname\tentt}.}
|
1022
|
+
\centerline{{\it\fontname\tenit\/},}
|
1023
|
+
\centerline{{\bf\fontname\tenbf}, and}
|
1024
|
+
\centerline{{\sl\fontname\tensl\/}}
|
1025
|
+
\centerline{are used for emphasis.}\vfill}
|
1026
|
+
\page\colophon
|
1027
|
+
% Blame: doc@cygnus.com, 1991.
|
1028
|
+
@end tex
|
1029
|
+
|
1030
|
+
@bye
|