DDD User Manual
DDD User Manual
Andreas Zeller
1
Copyright
c 2023 Michael J. Eager and Stefan Eickeler.
Distributed by
Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor
Boston, MA 02110
USA
Short Contents
Summary of DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 A Sample DDD Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Getting In and Out of DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 The DDD Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4 Navigating through the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5 Stopping the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6 Running the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7 Examining Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8 Machine-Level Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9 Changing the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10 The Command-Line Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
A Application Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
B Bugs and How To Report Them . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
C Configuration Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
D Dirty Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
E Extending DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
F Frequently Answered Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
G GNU General Public License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
H Help and Assistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
I GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Label Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Key Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Command Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Resource Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
File Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Concept Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
iii
Table of Contents
Summary of DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
About this Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Typographic conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Free software. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Getting DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Contributors to DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
History of DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
7 Examining Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.1 Showing Simple Values using Value Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.2 Printing Simple Values in the Debugger Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.3 Displaying Complex Values in the Data Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.3.1 Display Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.3.1.1 Creating Single Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.3.1.2 Selecting Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
7.3.1.3 Showing and Hiding Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
7.3.1.4 Rotating Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3.1.5 Displaying Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3.1.6 Displaying Program Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.3.1.7 Refreshing the Data Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7.3.1.8 Display Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7.3.1.9 Clustering Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.3.1.10 Creating Multiple Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.3.1.11 Editing all Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
7.3.1.12 Deleting Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.3.2 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.3.2.1 Array Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.3.2.2 Repeated Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.3.2.3 Arrays as Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.3.3 Assignment to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.3.4 Examining Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3.4.1 Displaying Dependent Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3.4.2 Dereferencing Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3.4.3 Shared Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3.4.4 Display Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
7.3.5 Customizing Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.3.5.1 Using Data Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.3.5.2 Applying Data Themes to Several Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7.3.5.3 Editing Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.3.5.4 Writing Data Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.3.5.5 Display Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
vii
Summary of DDD
The purpose of a debugger such as DDD is to allow you to see what is going on “inside” another
program while it executes—or what another program was doing at the moment it crashed.
DDD can do four main kinds of things (plus other things in support of these) to help you
catch bugs in the act:
• Start your program, specifying anything that might affect its behavior.
• Make your program stop on specified conditions.
• Examine what has happened, when your program has stopped.
• Change things in your program, so you can experiment with correcting the effects of one
bug and go on to learn about another.
Technically speaking, DDD is a front-end to a command-line debugger (called inferior debug-
ger, because it lies at the layer beneath DDD). DDD supports the following inferior debuggers:
• To debug executable binaries, you can use DDD with GDB, DBX, Ladebug, or XDB.
− GDB, the GNU debugger, is the recommended inferior debugger for DDD. GDB supports
native executables binaries originally written in C, C++, Objective-C, OpenCL, D,
Modula-2, Rust, Go, Pascal, Ada, and FORTRAN. (see Using GDB with Different
Languages in Debugging with GDB, for information on language support in GDB.)
− As an alternative to GDB, you can use DDD with the DBX debugger, as found on several
UNIX systems. Most DBX incarnations offer fewer features than GDB, and some of the
more advanced DBX features may not be supported by DDD. However, using DBX may
be useful if GDB does not understand or fully support the debugging information as
generated by your compiler.
− As an alternative to GDB and DBX, you can use DDD with Ladebug, as found on
Compaq and DEC systems. Ladebug offers fewer features than GDB, and some of
the more advanced Ladebug features may not be supported by DDD. However, using
Ladebug may be useful if GDB or DBX do not understand or fully support the debugging
information as generated by your compiler.1
− As another alternative to GDB, you can use DDD with the XDB debugger, as found on
HP-UX systems.2 .
• To debug Java byte code programs, you can use DDD with JDB, the Java debugger, as of
JDK 1.1 and later. (DDD has been tested with JDK 1.1 and JDK 1.2.)
• To debug Bash programs, you need a version Bash that supports extended debugging sup-
port; see http://bashdb.sourceforge.net. It important to make sure you get the right
version of the debugger that matches your version of Bash. For bash version 2.05b, you
need a patched version of bash as well as the debugger for bash.
• To debug GNU Make Makefiles, you need a version GNU Make that supports extended
debugging support. To get this enhanced version see http://bashdb.sourceforge.net/
remake.
• To debug Perl programs, you can use DDD with the Perl debugger, as of Perl 5.003 and
later.
• To debug Python programs, you need an extended version of the python debugger called
pydb. To get this, see http://bashdb.sourceforge.net/pydb.
See Section 2.1.1 [Choosing an Inferior Debugger], page 17, for choosing the appropriate
inferior debugger. See Chapter 1 [Sample Session], page 7, for getting a first impression of DDD.
1
Within DDD (and this manual), Ladebug is considered a DBX variant. Hence, everything said for DBX also
applies to Ladebug, unless stated otherwise.
2
XDB will no longer be maintained in future DDD releases. Use a recent GDB version instead.
4 Debugging with DDD
Typographic conventions
Ctrl+A The name for a key on the keyboard (or multiple keys pressed simultaneously)
run A sequence of characters to be typed on the keyboard.
~/.ddd/init
A file.
‘Help’ A graphical control element, such as a button or menu item.
‘File ⇒ Open Program’
A sequence of menu items, starting at the top-level menu bar.
argc - 1 Program code or debugger command.
-g A command-line option.
$ System prompt.
(gdb) Debugger prompt.
_ Cursor position.
version A metasyntactic variable; something that stands for another piece of text.
definition A definition.
caution Emphasis.
A warning Strong emphasis.
DDD An acronym.
Summary of DDD 5
Here’s an example. ‘break location’ is a typed command at the ‘(gdb) ’ prompt; the
metasyntactic variable ‘location’ would be replaced by the actual location. ‘_’ is the cursor
position after entering the command.
(gdb) break location
Breakpoint number at location
(gdb) _
Free software
DDD is free; this means that everyone is free to use it and free to redistribute it on a free basis.
DDD is not in the public domain; it is copyrighted and there are restrictions on its distribution,
but these restrictions are designed to permit everything that a good cooperating citizen would
want to do. What is not allowed is to try to prevent others from further sharing any version
of DDD that they might get from you. The precise conditions are found in the GNU General
Public License that comes with DDD; See Appendix G [License], page 167, for details.
The easiest way to get a copy of DDD is from someone else who has it. You need not ask for
permission to do so, or tell any one else; just copy it.
Getting DDD
You can get the latest version of DDD from the anonymous FTP server ‘ftp.gnu.org’ in the
directory /gnu/ddd. This server is also available by directing your web browser to the same
address. This should contain the following files:
ddd-version.tar.gz
The DDD source distribution. This should be all you need. The source distribution
also contains the DDD manual and the DDD() Themes manuals in both PDF and
HTML formats.
Contributors to DDD
Dorothea Lütkehaus and Andreas Zeller were the original authors of DDD. Many others have
contributed to its development. The files ChangeLog and THANKS in the DDD distribution ap-
proximates a blow-by-blow account.
History of DDD
The history of DDD is a story of code recycling. The oldest parts of DDD were written in 1990,
when Andreas Zeller designed VSL, a box-based visual structure language for visualizing data
and program structures. The VSL interpreter and the Box library became part of Andreas’
Diploma Thesis, a graphical syntax editor based on the Programming System Generator PSG.
In 1992, the VSL and Box libraries were recycled for the NORA project. For NORA, an
experimental inference-based software development tool set, Andreas wrote a graph editor (based
on VSL and the Box libraries) and facilities for inter-process knowledge exchange. Based on these
tools, Dorothea Lütkehaus (now Dorothea Krabiell ) realized DDD as her Diploma Thesis, 1994.
The original DDD had no source window; this was added by Dorothea during the winter of
1994–1995. In the first quarter of 1995, finally, Andreas completed DDD by adding command and
execution windows, extensions for DBX and remote debugging as well as configuration support
for several architectures. Since then, Andreas has further maintained and extended DDD, based
on the comments and suggestions of several DDD users around the world. See the comments in
the DDD source for details.
Major DDD events:
6 Debugging with DDD
April, 1995
DDD 0.9: First DDD beta release.
May, 1995 DDD 1.0: First public DDD release.
December, 1995
DDD 1.4: Machine-level debugging, glyphs, Emacs integration.
October, 1996
DDD 2.0: Color displays, XDB support, generic DBX support, command tool.
May, 1997 DDD 2.1: Alias detection, button tips, status displays.
November, 1997
DDD 2.2: Sessions, display shortcuts.
June, 1998
DDD 3.0: Icon tool bar, Java support, JDB support.
December, 1998
DDD 3.1: Data plotting, Perl support, Python support, Undo/Redo.
January, 2000
DDD 3.2: New manual, Readline support, Ladebug support.
January, 2001
DDD 3.3: Data themes, JDB 1.2 support, VxWorks support.
November, 2002
DDD 3.3.2: Bash support.
March, 2003
DDD 3.3.3: Better Bash support. Compiles using modern tools thanks to Daniel
Schepler.
Dec, 2005 DDD 3.3.12-test: GNU Make support added.
Feb, 2006 DDD 3.3.12-test3: Modernize Python debugging
Feb, 2009 DDD 3.3.12: First mainstream release to include improved support for Python, Bash
and Make.
March, 2023
DDD() 3.4.0: Update host system support; bug fixes.
7
1
Actual numbers and behavior on your system may vary.
8 Debugging with DDD
After a few seconds, DDD comes up. The Source Window contains the source of your de-
bugged program; use the Scroll Bar to scroll through the file.
Argument Field
Command Tool
Debugger Console
Status Line
The Debugger Console (at the bottom) contains DDD version information as well as a GDB
prompt.1
GNU DDD Version 3.4.0, by Dorothea Lütkehaus and Andreas Zeller.
Copyright
c 1995-1999 Technische Universität Braunschweig, Germany.
Copyright
c 1999-2001 Universität Passau, Germany.
Copyright
c 2001-2004 Universität des Saarlandes, Germany.
Reading symbols from sample...done.
(gdb) _
The first thing to do now is to place a Breakpoint (see Section 5.1 [Breakpoints], page 75),
making sample stop at a location you are interested in. Click on the blank space left to the
initialization of a. The Argument field ‘():’ now contains the location (‘sample.c:31’). Now,
click on ‘Break’ to create a breakpoint at the location in ‘()’. You see a little red stop sign
appear in line 31.
1
Re-invoke DDD with --gdb, if you do not see a ‘(gdb)’ prompt here (see Section 2.1.1 [Choosing an Inferior
Debugger], page 17)
Chapter 1: A Sample DDD Session 9
The next thing to do is to actually execute the program, such that you can examine its
behavior (see Chapter 6 [Running], page 83). Select ‘Program ⇒ Run’ to execute the program;
the ‘Run Program’ dialog appears.
Breakpoint
Arguments
In ‘Run with Arguments’, you can now enter arguments for the sample program. Enter the
arguments resulting in erroneous behavior here—that is, ‘8000 7000 5000 1000 4000’. Click on
‘Run’ to start execution with the arguments you just entered.
GDB now starts sample. Execution stops after a few moments as the breakpoint is reached.
This is reported in the debugger console.
(gdb) break sample.c:31
Breakpoint 1 at 0x8048666: file sample.c, line 31.
(gdb) run 8000 7000 5000 1000 4000
Starting program: sample 8000 7000 5000 1000 4000
To execute the current line, click on the ‘Next’ button on the command tool. The arrow
advances to the following line. Now, point again on ‘a’ to see that the value has changed and
that ‘a’ has actually been initialized.
Execution Position
Value Tip
To examine the individual values of the ‘a’ array, enter ‘a[0]’ in the argument field (you can
clear it beforehand by clicking on ‘():’) and then click on the ‘Print’ button. This prints the
current value of ‘()’ in the debugger console (see Section 7.2 [Printing Values], page 96). In our
case, you’ll get
(gdb) print a[0]
$1 = 0
(gdb) _
or some other value (note that ‘a’ has only been allocated, but the contents have not yet been
initialized).
To see all members of ‘a’ at once, you must use a special GDB operator. Since ‘a’ has been
allocated dynamically, GDB does not know its size; you must specify it explicitly using the ‘@’
operator (see Section 7.3.2.1 [Array Slices], page 106). Enter ‘a[0]@(argc - 1)’ in the argument
field and click on the ‘Print’ button. You get the first argc - 1 elements of ‘a’, or
(gdb) print a[0]@(argc - 1)
$2 = {0, 0, 0, 0, 0}
(gdb) _
Chapter 1: A Sample DDD Session 11
Rather than using ‘Print’ at each stop to see the current value of ‘a’, you can also display
‘a’, such that its is automatically displayed. With ‘a[0]@(argc - 1)’ still being shown in the
argument field, click on ‘Display’. The contents of ‘a’ are now shown in a new window, the
Data Window. Click on ‘Rotate’ to rotate the array horizontally.
Display Button
Data Window
Data Window
This time, you want to examine closer what ‘shell_sort’ is doing. Click on ‘Step’ to step
into the call to ‘shell_sort’. This leaves your program in the first executable line, or
⇒ int h = 1;
(gdb) step
shell_sort (a=0x8049878, size=6) at sample.c:9
(gdb) _
This output that shows the function where ‘sample’ is now suspended (and its arguments)
is called a stack frame display. It shows a summary of the stack. You can use ‘Status ⇒
Backtrace’ to see where you are in the stack as a whole; selecting a line (or clicking on ‘Up’ and
‘Down’) will let you move through the stack. Note how the ‘a’ display disappears when its frame
is left.
Backtrace
Let us now check whether ‘shell_sort’’s arguments are correct. After returning to the
lowest frame, enter ‘a[0]@size’ in the argument field and click on ‘Print’:
Surprise! Where does this additional value 1913 come from? The answer is simple: The
array size as passed in ‘size’ to ‘shell_sort’ is too large by one—1913 is a bogus value which
happens to reside in memory after ‘a’. And this last value is being sorted in as well.
To see whether this is actually the problem cause, you can now assign the correct value to
‘size’ (see Section 7.3.3 [Assignment], page 107). Select ‘size’ in the source code and click on
‘Set’. A dialog pops up where you can edit the variable value.
Chapter 1: A Sample DDD Session 13
Set Button
Edit value
Setting a Value
Change the value of ‘size’ to 5 and click on ‘OK’. Then, click on ‘Finish’ to resume execution
of the ‘shell_sort’ function:
(gdb) set variable size = 5
(gdb) finish
Run till exit from #0 shell_sort (a=0x8049878, size=5) at sample.c:9
0x80486ed in main (argc=6, argv=0xbffff918) at sample.c:35
(gdb) _
14 Debugging with DDD
Success! The ‘a’ display now contains the correct values ‘1000, 4000, 5000, 7000, 8000’.
Changed values
You can verify that these values are actually printed to standard output by further executing
the program. Click on ‘Cont’ to continue execution.
(gdb) cont
1000 4000 5000 7000 8000
All is done; the program works fine now. You can end this DDD session with ‘Program ⇒
Exit’ or Ctrl+Q.
16 Debugging with DDD
#include <stdio.h>
#include <stdlib.h>
shell_sort(a, argc);
free(a);
return 0;
}
17
to run DDD with JDB, pydb, Perl, Bash, or GNU Make as an inferior debugger.
• If the program is an executable binary, you should use DBX, GDB, Ladebug, or XDB. In
general, GDB (or its HP variant, WDB) provides the most functionality of these debuggers.
Use
ddd --dbx program
ddd --gdb program
ddd --ladebug program
ddd --wdb program
ddd --xdb program
to run DDD with GDB, WDB, DBX, Ladebug, or XDB as inferior debugger.
If you invoke DDD without any of these options, but give a program to analyze, then DDD
will automatically determine the inferior debugger:
• If program is a Python program, a Perl script, or a Java class, DDD will invoke the appro-
priate debugger.
• If program is an executable binary, DDD will invoke its default debugger for executables
(usually GDB).
See Section 2.5 [Customizing Debugger Interaction], page 34, for more details on determining
the inferior debugger.
--configuration
Print the DDD configuration settings on standard output and exit.
Giving this option is equivalent to setting the DDD ‘showConfiguration’ resource
to ‘on’. See Section B.5 [Diagnostics], page 152, for details.
--check-configuration
Check the DDD environment (in particular, the X configuration), report any possible
problem causes and exit.
Giving this option is equivalent to setting the DDD ‘checkConfiguration’ resource
to ‘on’. See Section B.5 [Diagnostics], page 152, for details.
--data-window
Open the data window upon start-up.
Giving this option is equivalent to setting the DDD ‘openDataWindow’ resource to
‘on’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--dbx Run DBX as inferior debugger.
Giving this option is equivalent to setting the DDD ‘debugger’ resource to ‘dbx’.
See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--debugger name
Invoke the inferior debugger name. This is useful if you have several debugger
versions around, or if the inferior debugger cannot be invoked under its usual name
(i.e. gdb, wdb, dbx, xdb, jdb, pydb, or perl).
This option can also be used to pass options to the inferior debugger that would
otherwise conflict with DDD options. For instance, to pass the option -d directory
to XDB, use:
ddd --debugger "xdb -d directory"
If you use the --debugger option, be sure that the type of inferior debugger is
specified as well. That is, use one of the options --gdb, --dbx, --xdb, --jdb,
--pydb, or --perl (unless the default setting works fine).
Giving this option is equivalent to setting the DDD ‘debuggerCommand’ resource to
name. See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--debugger-console
Open the debugger console upon start-up.
Giving this option is equivalent to setting the DDD ‘openDebuggerConsole’ resource
to ‘on’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--disassemble
Disassemble the source code. See also the --no-disassemble option, below.
Giving this option is equivalent to setting the DDD ‘disassemble’ resource to ‘on’.
See Section 4.4 [Customizing Source], page 71, for details.
--exec-window
Run the debugged program in a specially created execution window. This is useful
for programs that have special terminal requirements not provided by the debugger
window, as raw keyboard processing or terminal control sequences. See Section 6.2
[Using the Execution Window], page 85, for details.
Giving this option is equivalent to setting the DDD ‘separateExecWindow’ resource
to ‘on’. See Section 6.2.1 [Customizing the Execution Window], page 85, for details.
--font fontname
-fn fontname
Use fontname as default font.
20 Debugging with DDD
Giving this option is equivalent to setting the DDD ‘showLicense’ resource to on.
See Section B.5 [Diagnostics], page 152, for details.
--login username
-l username
Use username as remote user name. See Section 2.4.2 [Remote Debugger], page 32,
for details.
Giving this option is equivalent to setting the DDD ‘debuggerHostLogin’ resource
to username. See Section 2.4.2 [Remote Debugger], page 32, for details.
--maintenance
Enable the top-level ‘Maintenance’ menu with options for debugging DDD. See
Section 3.1.9 [Maintenance Menu], page 46, for details.
Giving this option is equivalent to setting the DDD ‘maintenance’ resource to on.
See Section 3.1.9 [Maintenance Menu], page 46, for details.
--manual Print the DDD manual on standard output and exit.
Giving this option is equivalent to setting the DDD ‘showManual’ resource to on.
See Section B.5 [Diagnostics], page 152, for details.
--news Print the DDD news on standard output and exit.
Giving this option is equivalent to setting the DDD ‘showNews’ resource to on. See
Section B.5 [Diagnostics], page 152, for details.
--no-button-tips
Disable button tips.
Giving this option is equivalent to setting the DDD ‘buttonTips’ resource to ‘off’.
See Section 3.6.2 [Customizing Help], page 57, for details.
--no-data-window
Do not open the data window upon start-up.
Giving this option is equivalent to setting the DDD ‘openDataWindow’ resource to
‘off’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--no-debugger-console
Do not open the debugger console upon start-up.
Giving this option is equivalent to setting the DDD ‘openDebuggerConsole’ resource
to ‘off’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--no-disassemble
Do not disassemble the source code.
Giving this option is equivalent to setting the DDD ‘disassemble’ resource to ‘off’.
See Section 4.4 [Customizing Source], page 71, for details.
--no-exec-window
Do not run the debugged program in a specially created execution window; use
the debugger console instead. Useful for programs that have little terminal in-
put/output, or for remote debugging. See Section 6.2 [Using the Execution Win-
dow], page 85, for details.
Giving this option is equivalent to setting the DDD ‘separateExecWindow’ resource
to ‘off’. See Section 6.2.1 [Customizing the Execution Window], page 85, for details.
--no-glyphs
Do not use glyphs; display the current execution position and breakpoints as text
characters.
Giving this option is equivalent to setting the DDD ‘displayGlyphs’ resource to
‘off’. See Section 4.4 [Customizing Source], page 71, for details.
22 Debugging with DDD
--no-maintenance
Do not enable the top-level ‘Maintenance’ menu with options for debugging DDD.
This is the default. See Section 3.1.9 [Maintenance Menu], page 46, for details.
Giving this option is equivalent to setting the DDD ‘maintenance’ resource to off.
See Section 3.1.9 [Maintenance Menu], page 46, for details.
--no-source-window
Do not open the source window upon start-up.
Giving this option is equivalent to setting the DDD ‘openSourceWindow’ resource to
‘off’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--no-value-tips
Disable value tips.
Giving this option is equivalent to setting the DDD ‘valueTips’ resource to ‘off’.
See Section 7.1 [Value Tips], page 95, for details.
--nw Do not use the X window interface. Start the inferior debugger on the local host.
--perl Run Perl as inferior debugger.
Giving this option is equivalent to setting the DDD ‘debugger’ resource to ‘perl’.
See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--pydb Run pydb as inferior debugger.
Giving this option is equivalent to setting the DDD ‘debugger’ resource to ‘pydb’.
See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--panned-graph-editor
Use an Athena panner to scroll the data window. Most people prefer panners on
scroll bars, since panners allow two-dimensional scrolling. However, the panner is
off by default, since some Motif implementations do not work well with Athena
widgets. See Section 7.3.5.5 [Display Resources], page 115, for details; see also
--scrolled-graph-editor, below.
Giving this option is equivalent to setting the DDD ‘pannedGraphEditor’ resource
to ‘on’. See Section 7.3.5.5 [Display Resources], page 115, for details.
--play-log log-file
Recapitulate a previous DDD session.
ddd --play-log log-file
invokes DDD as inferior debugger, simulating the inferior debugger given in log-file
(see below). This is useful for debugging DDD.
Giving this option is equivalent to setting the DDD ‘playLog’ resource to ‘on’. See
Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--PLAY log-file
Simulate an inferior debugger. log-file is a ~/.ddd/log file as generated by some
previous DDD session (see Section B.5.1 [Logging], page 152). When a command is
entered, scan log-file for this command and re-issue the logged reply; if the command
is not found, do nothing. This is used by the --play option.
--rhost hostname
--rhost username@hostname
Run the inferior debugger interactively on the remote host hostname. If username
is given and the --login option is not used, use username as remote user name.
See Section 2.4.2 [Remote Debugger], page 32, for details.
Giving this option is equivalent to setting the DDD ‘debuggerRHost’ resource to
hostname. See Section 2.4.2 [Remote Debugger], page 32, for details.
Chapter 2: Getting In and Out of DDD 23
--scrolled-graph-editor
Use Motif scroll bars to scroll the data window. This is the default in most DDD
configurations. See Section 7.3.5.5 [Display Resources], page 115, for details; see
also --panned-graph-editor, above.
Giving this option is equivalent to setting the DDD ‘pannedGraphEditor’ resource
to ‘off’. See Section 7.3.5.5 [Display Resources], page 115, for details.
--separate-windows
--separate
Separate the console, source and data windows. See also the --attach options,
above.
Giving this option is equivalent to setting the DDD ‘Separate’ resource class to
‘off’. See Section 3.6.4.2 [Window Layout], page 60, for details.
--session session
Load session upon start-up. See Section 2.3.2 [Resuming Sessions], page 30, for
details.
Giving this option is equivalent to setting the DDD ‘session’ resource to session.
See Section 2.3.2 [Resuming Sessions], page 30, for details.
--source-window
Open the source window upon start-up.
Giving this option is equivalent to setting the DDD ‘openSourceWindow’ resource to
‘on’. See Section 3.6.4.4 [Toggling Windows], page 64, for details.
--status-at-bottom
Place the status line at the bottom of the source window.
Giving this option is equivalent to setting the DDD ‘statusAtBottom’ resource to
‘on’. See Section 3.6.4.2 [Window Layout], page 60, for details.
--status-at-top
Place the status line at the top of the source window.
Giving this option is equivalent to setting the DDD ‘statusAtBottom’ resource to
‘off’. See Section 3.6.4.2 [Window Layout], page 60, for details.
--sync-debugger
Do not process X events while the debugger is busy. This may result in slightly
better performance on single-processor systems.
Giving this option is equivalent to setting the DDD ‘synchronousDebugger’ resource
to ‘on’. See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--toolbars-at-bottom
Place the toolbars at the bottom of the respective window.
Giving this option is equivalent to setting the DDD ‘toolbarsAtBottom’ resource to
‘on’. See Section 3.6.4.2 [Window Layout], page 60, for details.
--toolbars-at-top
Place the toolbars at the top of the respective window.
Giving this option is equivalent to setting the DDD ‘toolbarsAtBottom’ resource to
‘off’. See Section 3.6.4.2 [Window Layout], page 60, for details.
--trace Show the interaction between DDD and the inferior debugger on standard error.
This is useful for debugging DDD. If --trace is not specified, this information is
written into ~/.ddd/log (~ stands for your home directory), such that you can also
24 Debugging with DDD
do a post-mortem debugging. See Section B.5.1 [Logging], page 152, for details
about logging.
Giving this option is equivalent to setting the DDD ‘trace’ resource to on. See
Section B.5 [Diagnostics], page 152, for details.
--tty
-t Enable TTY interface, taking additional debugger commands from standard input
and forwarding debugger output on standard output. Current positions are issued
in a format readable for humans. By default, the debugger console is disabled.
Giving this option is equivalent to setting the DDD ‘ttyMode’ resource to ‘on’. See
Section 10.2 [TTY mode], page 135, for details.
--value-tips
Enable value tips.
Giving this option is equivalent to setting the DDD ‘valueTips’ resource to ‘on’.
See Section 7.1 [Value Tips], page 95, for details.
--version
-v Print the DDD version on standard output and exit.
Giving this option is equivalent to setting the DDD ‘showVersion’ resource to ‘on’.
See Section B.5 [Diagnostics], page 152, for details.
--vsl-library library
Load the VSL library library instead of using the DDD built-in library. This is useful
for customizing display shapes and fonts.
Giving this option is equivalent to setting the DDD ‘vslLibrary’ resource to library.
See Section 7.3.5.6 [VSL Resources], page 116, for details.
--vsl-path path
Search VSL libraries in path (a colon-separated directory list).
Giving this option is equivalent to setting the DDD ‘vslPath’ resource to path. See
Section 7.3.5.6 [VSL Resources], page 116, for details.
--vsl-help
Show a list of further options controlling the VSL interpreter. These options are
intended for debugging purposes and are subject to change without further notice.
--wdb Run WDB as inferior debugger.
Giving this option is equivalent to setting the DDD ‘debugger’ resource to ‘wdb’.
See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
--xdb Run XDB as inferior debugger.
Giving this option is equivalent to setting the DDD ‘debugger’ resource to ‘xdb’.
See Section 2.5 [Customizing Debugger Interaction], page 34, for details.
-- Stops the processing of the options and passes all options after this option to the
inferior debugger.
2.1.3 X Options
DDD also understands the following X options. Note that these options only take a single dash
-.
-display display
Use the X server display. By default, display is taken from the DISPLAY environment
variable.
Chapter 2: Getting In and Out of DDD 25
-geometry geometry
Specify the initial size and location of the debugger console.
-iconic Start DDD iconified.
-name name
Give DDD the name name.
-selectionTimeout timeout
Specify the timeout in milliseconds within which two communicating applications
must respond to one another for a selection request.
-title name
Give the DDD window the title name.
-xrm resourcestring
Specify a resource name and value to override any defaults.
-password psswd
password of interpreter to attach to (from -debug)
These JDB options are forwarded to the debuggee:
-verbose
-v Turn on verbose mode.
-debug Enable remote Java debugging,
-noasyncgc
Don’t allow asynchronous garbage collection.
-verbosegc
Print a message when garbage collection occurs.
-noclassgc
Disable class garbage collection.
-checksource
-cs Check if source is newer when loading classes.
-ss number
Set the maximum native stack size for any thread.
-oss number
Set the maximum Java stack size for any thread.
-ms number
Set the initial Java heap size.
-mx number
Set the maximum Java heap size.
-Dname=value
Set the system property name to value.
-classpath path
List directories in which to look for classes. path is a list of directories separated by
colons.
-prof
-prof:file
Output profiling data to ./java.prof. If file is given, write the data to ./file.
-verify Verify all classes when read in.
-verifyremote
Verify classes read in over the network (default).
-noverify
Do not verify any class.
-dbgtrace
Print info for debugging JDB.
Further options can be found in the JDB documentation.
Normally, automatic reloading of options should already suffice. If you need stronger pro-
tection, DDD also provides a warning against multiple instances. This warning is disabled by
default, If you want to be warned about multiple DDD invocations sharing the same prefer-
ences and history files, enable ‘Edit ⇒ Preferences ⇒ Warn if Multiple DDD Instances are
Running’.
This setting is tied to the following resource (see Section 3.6 [Customizing], page 56):
2.1.6 X warnings
If you are bothered by X warnings, you can suppress them by setting ‘Edit ⇒ Preferences ⇒
General ⇒ Suppress X warnings’.
This setting is tied to the following resource (see Section 3.6 [Customizing], page 56):
An interrupt (ESC or ‘Interrupt’) does not exit from DDD, but rather terminates the action
of any debugger command that is in progress and returns to the debugger command level. It is
safe to type the interrupt character at any time because the debugger does not allow it to take
effect until a time when it is safe.
In case an ordinary interrupt does not succeed, you can also use an abort (Ctrl+\ or ‘Abort’),
which sends a SIGABRT signal to the inferior debugger. Use this in emergencies only; the inferior
debugger may be left inconsistent or even exit after a SIGABRT signal.
As a last resort (if DDD hangs, for example), you may also interrupt DDD itself using an
interrupt signal (SIGINT). This can be done by typing the interrupt character (usually Ctrl+C)
in the shell DDD was started from, or by using the UNIX ‘kill’ command. An interrupt signal
interrupts any DDD action; the inferior debugger is interrupted as well. Since this interrupt
signal can result in internal inconsistencies, use this as a last resort in emergencies only; save
your work as soon as possible and restart DDD.
Default session
Saved sessions
Set to save
Program Data
Click to save
Saving a Session
• All DDD options (see Section 3.6.1.3 [Saving Options], page 57).
• All debugger settings (see Section 3.6.5 [Debugger Settings], page 65).
• All user-defined buttons (see Section 10.4 [Defining Buttons], page 136).
• All user-defined commands (see Section 10.5 [Defining Commands], page 139).
• The command history (see Section 10.1.2 [Command History], page 134).
After saving the current state as a session, the session becomes active. This means that DDD
state will be saved as session defaults:
To make the current session inactive, open the default session named ‘[None]’. See
Section 2.3.2 [Resuming Sessions], page 30, for details on opening sessions.
The session named ‘[None]’ is the default session which is active when starting DDD. To save
options for default sessions, choose the default session before exiting DDD. See Section 3.6.1.3
[Saving Options], page 57, for details.
1
Only if a core file is included.
2
If a core file is not to be included in the session, DDD data displays are saved as deferred ; that is, they will
be restored as soon as program execution reaches the scope in which they were created. See Section 7.3.1.1
[Creating Single Displays], page 97, for details.
Chapter 2: Getting In and Out of DDD 31
Default session
Saved sessions
Click to open
Opening a Session
If a the restored session includes a core dump, the program being debugged will be in the
same state at the time the session was saved; in particular, you can examine the program data.
However, you will not be able to resume program execution since the process and its environment
(open files, resources, etc.) no longer exist. However, you can restart the program, re-using the
restored breakpoints and data displays.
Opening sessions also restores command definitions, buttons, display shortcuts and the source
tab width. This way, you can maintain a different set of definitions for each session.
You can also specify a session to open when starting DDD. To invoke DDD with a session
session, use
ddd --session session
There is also a shortcut that opens the session session and invokes the inferior debugger on
an executable named session (in case session cannot be opened):
ddd =session
There is no need to give further command-line options when restarting a session, as they will
be overridden by the options saved in the session.
You can also use an X session manager such as xsm to save and restore DDD sessions.3 When
being shut down by a session manager, DDD saves its state under the name specified by the
session manager; resuming the X session makes DDD reload its saved state.
This setting is tied to the following resource (see Section 3.6 [Customizing], page 56):
getCoreCommand (class GetCoreCommand) [Resource]
A command to get a core dump of a running process (typically, gcore) ‘@FILE@’ is replaced
by the base name of the file to create; ‘@PID@’ is replaced by the process id. The output must
be written to ‘@FILE@.@PID@’.
Leave the value empty if you have no gcore or similar command.
• In remote mode, all sources are loaded from the remote host; file dialogs scan remote
directories. This may result in somewhat slower operation than normal.
• To help you find problems due to remote execution, run DDD with the --trace option.
This prints the shell commands issued by DDD on standard error.
See Section 2.4.2.1 [Customizing Remote Debugging], page 33, for customizing remote mode.
The local .gdbinit file is useful for setting up directory search paths, etc.
Of course, you can also combine DDD remote mode and GDB remote mode, running DDD,
GDB, and the debugged program each on a different machine.
Menu Bar
Tool Bar
Data Window
Panner
Command Tool
Resize Sash
Machine Code Window
Value Tip
Debugger Console
Status Line Busy Indicator
Besides these three main windows, there are some other optional windows:
• The Command Tool offers buttons for frequently used commands. It is usually placed on
the source window. See Section 3.3 [Command Tool], page 51, for details.
• The Machine Code Window shows the current machine code. It is usually placed beneath
the current source. See Section 8.1 [Machine Code], page 127, for details.
• The Execution Window shows the input and output of the debugged program. See
Section 6.2 [Using the Execution Window], page 85, for details.
Program Perform operations related to the program being debugged, such as starting and
stopping the program.
Commands Perform operations related to DDD commands, such as accessing the command
history or defining new commands.
Status Examine the program status, such as the stack traces, registers, or threads.
Source Perform source-related operations such as looking up items or editing breakpoints.
Data Perform data-related operations such as editing displays or layouting the display
graph.
Maintenance
Perform operations that are useful for debugging DDD. By default, this menu is
disabled.
Help Give help on DDD usage.
There are two ways of selecting an item from a pull-down menu:
• Select an item in the menu bar by moving the cursor over it and click mouse button 1. Then
move the cursor over the menu item you want to choose and click left again.
• Select an item in the menu bar by moving the cursor over it and click and hold mouse
button 1. With the mouse button depressed, move the cursor over the menu item you want,
then release it to make your selection.
The menus can also be torn off (i.e. turned into a persistent window) by selecting the dashed
line at the top.
If a command in the pull-down menu is not applicable in a given situation, the command is
disabled and its name appears faded. You cannot invoke items that are faded. For example,
many commands on the ‘Edit’ menu appear faded until you select text on which they are to
operate; after you select a block of text, edit commands are enabled.
Save Session As
Save the current DDD session such that you can resume it later (Ctrl+S). See
Section 2.3.1 [Saving Sessions], page 29, for details.
Attach to Process
Attach to a running process of the debugged program. See Section 6.3 [Attaching
to a Process], page 86, for details.
Detach Process
Detach from the running process. See Section 6.3 [Attaching to a Process], page 86,
for details.
Print Graph
Print the current graph on a printer. See Section 7.3.7 [Printing the Graph],
page 118, for details.
Change Directory
Change the working directory of your program. See Section 6.1.3 [Working Direc-
tory], page 84, for details.
Make Run the make program (Ctrl+M). See Section 9.2 [Recompiling], page 131, for
details.
Close Close this DDD window (Ctrl+W). See Section 2.2 [Quitting], page 28, for details.
Restart Restart DDD.
Exit Exit DDD (Ctrl+Q). See Section 2.2 [Quitting], page 28, for details.
Run Again Start program execution with the most recently used arguments (F3). See Section 6.1
[Starting Program Execution], page 83, for details.
Run in Execution Window
If enabled, start next program execution in separate execution window. See
Section 6.2 [Using the Execution Window], page 85, for details.
Step Continue running your program until control reaches a different source line, then
stop it and return control to DDD (F5). See Section 6.5 [Resuming Execution],
page 87, for details.
Step Instruction
Execute one machine instruction, then stop and return to DDD (Shift+F5). See
Section 8.2 [Machine Code Execution], page 127, for details.
Next Continue to the next source line in the current (innermost) stack frame (F6). This is
similar to ‘Step’, but function calls that appear within the line of code are executed
without stopping. See Section 6.5 [Resuming Execution], page 87, for details.
Next Instruction
Execute one machine instruction, but if it is a function call, proceed until the func-
tion returns (Shift+F6). See Section 8.2 [Machine Code Execution], page 127, for
details.
Until Continue running until a source line past the current line, in the current stack frame,
is reached (F7). See Section 6.5 [Resuming Execution], page 87, for details.
Finish Continue running until just after function in the selected stack frame returns (F8).
Print the returned value (if any). See Section 6.5 [Resuming Execution], page 87,
for details.
Continue Resume program execution, at the address where your program last stopped (F9);
any breakpoints set at that address are bypassed. See Section 6.5 [Resuming Exe-
cution], page 87, for details.
Continue Without Signal
Continue execution without giving a signal (Shift+F9). This is useful when your
program stopped on account of a signal and would ordinary see the signal when
resumed with ‘Continue’. See Section 6.10 [Signals], page 92, for details.
Kill Kill the process of the debugged program (F4). See Section 6.11 [Killing the Pro-
gram], page 94, for details.
Interrupt
Interrupt program execution (Esc or Ctrl+C; see Section 3.1.11.2 [Customizing the
Edit Menu], page 48, for details). This is equivalent to sending an interrupt signal
to the process. See Section 5.3 [Interrupting], page 81, for details.
Abort Abort program execution (and maybe debugger execution, too; Ctrl+\). This is
equivalent to sending a SIGABRT signal to the process. See Section 2.2 [Quitting],
page 28, for details.
Command History
View the command history. See Section 10.1.2 [Command History], page 134, for
details.
Previous Show the previous command from the command history (Up). See Section 10.1.2
[Command History], page 134, for details.
Next Show the next command from the command history (Down). See Section 10.1.2
[Command History], page 134, for details.
Find Backward
Do an incremental search backward through the command history (Ctrl+B). See
Section 10.1.2 [Command History], page 134, for details.
Find Forward
Do an incremental search forward through the command history (Ctrl+F). See
Section 10.1.2 [Command History], page 134, for details.
Quit Search
Quit incremental search through the command history (Esc). See Section 10.1.2
[Command History], page 134, for details.
Complete Complete the current command in the debugger console (Tab). See Section 10.1
[Entering Commands], page 133, for details.
Apply Apply the current command in the debugger console (Apply). See Section 10.1
[Entering Commands], page 133, for details.
Clear Line
Clear the current command line in the debugger console (Ctrl+U). See Section 10.1
[Entering Commands], page 133, for details.
Clear Window
Clear the debugger console (Shift+Ctrl+U). See Section 10.1 [Entering Commands],
page 133, for details.
Define Command
Define a new debugger command. See Section 10.5 [Defining Commands], page 139,
for details.
Edit Buttons
Customize DDD buttons. See Section 10.4 [Defining Buttons], page 136, for details.
Down Select the stack frame (i.e. the function) that was called by this one (Ctrl+Down).
This advances toward the innermost frame, to lower frame numbers, to frames that
were created more recently. See Section 6.7 [Stack], page 89, for details.
Print () Print the value of ‘()’ in the debugger console (Ctrl+=). See Section 7.2 [Printing
Values], page 96, for details.
Display ()
Display the value of ‘()’ in the data window (Ctrl+-). See Section 7.3 [Displaying
Values], page 96, for details.
Detect Aliases
If enabled, detect shared data structures (Alt+A). See Section 7.3.4.3 [Shared Struc-
tures], page 108, for a discussion.
Display Local Variables
Show all local variables in a display (Alt+L). See Section 7.3.1.5 [Displaying Local
Variables], page 100, for details.
Display Arguments
Show all arguments of the current function in a display (Alt+U). See Section 7.3.1.5
[Displaying Local Variables], page 100, for details.
Status Displays
Show current debugging information in a display. See Section 7.3.1.6 [Displaying
Program Status], page 101, for details.
Align on Grid
Align all displays on the grid (Alt+G). See Section 7.3.6.3 [Aligning Displays],
page 117, for a discussion.
Rotate Graph
Rotate the graph by 90 degrees (Alt+R). See Section 7.3.6.5 [Rotating the Graph],
page 118, for details.
Layout Graph
Layout the graph (Alt+Y). See Section 7.3.6 [Layouting the Graph], page 117, for
details.
Refresh Update all values in the data window (Ctrl+L). See Section 7.3.1.7 [Refreshing the
Data Window], page 102, for details.
Dump Core Just dump core when DDD crashes; don’t invoke a debugger. This is the
default setting, as the core dump may contain important information
required for debugging DDD.
Do Nothing
Do not dump core or invoke a debugger when DDD crashes.
Remove Menu
Make this menu inaccessible again.
Using GDB and Perl, the argument field provides a completion mechanism. You can enter
the first few characters of an item an press the TAB key to complete it. Pressing TAB again shows
alternative completions.
After having entered an argument, you can select one of the buttons on the right. Most of
these buttons also have menus associated with them; this is indicated by a small arrow in the
upper right corner. Pressing and holding mouse button 1 on such a button will pop up a menu
with further operations.
These are the buttons of the tool bar. Note that not all buttons may be inactive, depending
on the current state and the capabilities of the inferior debugger.
Lookup
Look up the argument ‘()’ in the source code. See Section 4.3.1 [Looking up Defi-
nitions], page 69, for details.
Find >>
Look up the next occurrence of the argument ‘()’ in the current source code. See
Section 4.3.2 [Textual Search], page 69, for details.
Break/Clear
Toggle a breakpoint (see Section 5.1 [Breakpoints], page 75) at the location ‘()’.
Break If there is no breakpoint at ‘()’, then this button is labeled ‘Break’.
Clicking on ‘Break’ sets a breakpoint at the location ‘()’. See
Section 5.1.1 [Setting Breakpoints], page 75, for details.
Clear If there already is a breakpoint at ‘()’, then this button is labeled
‘Clear’. Clicking on ‘Clear’ clears (deletes) the breakpoint at the loca-
tion ‘()’. See Section 5.1.2 [Deleting Breakpoints], page 76, for details.
Watch/Unwatch
Toggle a watchpoint (see Section 5.2 [Watchpoints], page 81) on the expression ‘()’.
Watch If ‘()’ is not being watched, then this button is labeled ‘Watch’. Clicking
on ‘Watch’ creates a watchpoint on the expression ‘()’. See Section 5.2.1
[Setting Watchpoints], page 81, for details.
Unwatch If ‘()’ is being watched, then this button is labeled ‘Unwatch’. Clicking
on ‘Unwatch’ clears (deletes) the watchpoint on ‘()’. See Section 5.2.4
[Deleting Watchpoints], page 81, for details.
Print
Print the value of ‘()’ in the debugger console. See Section 7.2 [Printing Values],
page 96, for details.
50 Debugging with DDD
Display
Display the value of ‘()’ in the data window. See Section 7.3 [Displaying Values],
page 96, for details.
Plot
Plot ‘()’ in a plot window. See Section 7.4 [Plotting Values], page 120, for details.
Show/Hide
Toggle details of the selected display(s). See Section 7.3.1.3 [Showing and Hiding
Details], page 98, for a discussion.
Rotate
Rotate the selected display(s). See Section 7.3.1.4 [Rotating Displays], page 100, for
details.
Set
Set (change) the value of ‘()’. See Section 7.3.3 [Assignment], page 107, for details.
Undisp
Undisplay (delete) the selected display(s). See Section 7.3.1.12 [Deleting Displays],
page 105, for details.
Images This lets each tool bar button show an image illustrating the action.
Captions This shows the action name below the image.
The default is to have images as well as captions, but you can choose to have only images
(saving space) or only captions.
No captions, no images
If you choose to have neither images nor captions, tool bar buttons are labeled like other
buttons, as in DDD 2.x. Note that this implies that in the stacked window configuration, the
common tool bar cannot be displayed; it is replaced by two separate tool bars, as in DDD 2.x.
If you enable ‘Flat’ buttons (default), the border of tool bar buttons will appear only if the
mouse pointer is over them. This latest-and-greatest GUI invention can be disabled, such that
the button border is always shown.
If you enable ‘Color’ buttons, tool bar images will be colored when entered. If DDD was
built using Motif 2.0 and later, you can also choose a third setting, where buttons appear in
color all the time.
Here are the related resources (see Section 3.6 [Customizing], page 56):
The command tool can be configured to appear as a command tool bar above the source
window; see ‘Edit ⇒ Preferences ⇒ Source ⇒ Tool Buttons Location’ for details.
Whenever you save DDD state, DDD also saves the distance between command tool and
source window, such that you can select your own individual command tool placement. To
move the command tool to its saved position, use ‘View ⇒ Command Tool’.
Step program one line (step into calls) Step one instruction (step into calls)
Step program one line (step over calls) Step one instruction (step over calls)
Continue until program reaches next line Continue until frame returns
Select stack frame that called this one Select stack frame called by this one
These are the buttons of the command tool. Note that not all buttons may be inactive,
depending on the current state and the capabilities of the inferior debugger.
Run Start program execution. When you click this button, your program will begin to
execute immediately. See Section 6.1 [Starting Program Execution], page 83, for
details.
Interrupt
Interrupt program execution. This is equivalent to sending an interrupt signal to
the process. See Section 5.3 [Interrupting], page 81, for details.
Step Continue running your program until control reaches a different source line, then
stop it and return control to DDD. See Section 6.5 [Resuming Execution], page 87,
for details.
Stepi Execute one machine instruction, then stop and return to DDD. See Section 8.2
[Machine Code Execution], page 127, for details.
Next Continue to the next source line in the current (innermost) stack frame. This is
similar to ‘Step’, but function calls that appear within the line of code are executed
without stopping. See Section 6.5 [Resuming Execution], page 87, for details.
Nexti Execute one machine instruction, but if it is a function call, proceed until the func-
tion returns. See Section 8.2 [Machine Code Execution], page 127, for details.
Chapter 3: The DDD Windows 53
Until Continue running until a source line past the current line, in the current stack frame,
is reached. See Section 6.5 [Resuming Execution], page 87, for details.
Finish Continue running until just after function in the selected stack frame returns. Print
the returned value (if any). See Section 6.5 [Resuming Execution], page 87, for
details.
Cont Resume program execution, at the address where your program last stopped; any
breakpoints set at that address are bypassed. See Section 6.5 [Resuming Execution],
page 87, for details.
Kill Kill the process of the debugged program. See Section 6.11 [Killing the Program],
page 94, for details.
Up Select the stack frame (i.e. the function) that called this one. This advances toward
the outermost frame, to higher frame numbers, to frames that have existed longer.
See Section 6.7 [Stack], page 89, for details.
Down Select the stack frame (i.e. the function) that was called by this one. This advances
toward the innermost frame, to lower frame numbers, to frames that were created
more recently. See Section 6.7 [Stack], page 89, for details.
Undo Undo the most recent action. Almost all commands can be undone this way. See
Section 3.5 [Undo and Redo], page 55, for details.
Redo Redo the action most recently undone. Every command undone can be redone this
way. See Section 3.5 [Undo and Redo], page 55, for details.
Edit Invoke an editor for the current source file. See Section 9.1 [Editing Source Code],
page 131, for details.
Make Run the make program with the most recently given arguments. See Section 9.2
[Recompiling], page 131, for details.
See Section 10.4.1 [Customizing Buttons], page 137, for details on customizing the tool but-
tons.
Source Preferences
• If this is ‘off’, the command tool is created as a transient window. Several window
managers keep transient windows automatically on top of their parents, which is appro-
priate for the command tool. However, your window manager may be configured not
to decorate transient windows, which means that you cannot easily move the command
tool around.
• If this is ‘on’, DDD realizes the command tool as a top-level window. Such windows are
always decorated by the window manager. However, top-level windows are not automat-
ically kept on top of other windows, such that you may wish to set the ‘autoRaiseTool’
resource, too.
• If this is ‘auto’ (default), DDD checks whether the window manager decorates transients.
If yes, the command tool is realized as a transient window (as in the ‘off’ setting); if no,
the command tool is realized as a top-level window (as in the ‘on’ setting). Hence, the
command tool is always decorated using the “best” method, but the extra check takes
some time.
• Finally, the DDD Tip Of The Day gives you important hints with each new DDD invocation.
All these functions can be customized in various ways (see Section 3.6.2 [Customizing Help],
page 57).
If, after all, you made a mistake, don’t worry: almost every DDD command can be undone.
See Section 3.5 [Undo and Redo], page 55, for details.
• Finally, you can set the appropriate resource in a file named .ddd/init in your home
directory. See [Resource Index], page 195, for a list of DDD resources to be set.
General Preferences
These are the related DDD resources (see Section 3.6 [Customizing], page 56):
See Section 2.1.2 [Options], page 18, for options to set this resource upon DDD invocation.
The actual tips are controlled by these resources (see Section 3.6 [Customizing], page 56):
$WWWBROWSER, then to invoke a new Netscape process, then to let a running Emacs or XEmacs
do the job (via gnudoit), then to invoke Firefox, then to invoke Lynx in an xterm.
Ddd*wwwCommand: \
netscape-6.0 -remote ’openURL(@URL@)’ \
|| netscape-6.0 ’@URL@’
This command first tries to connect to a running netscape-6.0 browser; if this fails, it starts
a new netscape-6.0 process.
This is the default WWW Page shown by ‘Help ⇒ DDD WWW Page’:
To set a maximum size for the undo buffer, set ‘Edit ⇒ Preferences ⇒ General ⇒ Undo
Buffer Size’.
You can also limit the number of entries in the undo buffer, regardless of size (see Section 3.6
[Customizing], page 56):
To clear the undo buffer at any time, thus reducing memory usage, use ‘Edit ⇒ Preferences
⇒ General ⇒ Clear Undo Buffer’
Startup Preferences
You can also customize the appearance of the splash screen (see Section 3.6 [Customizing],
page 56):
Please note: if DDD runs on a monochrome display, or if DDD was compiled without the
XPM library, only the monochrome version (‘m’) can be shown.
Debugger Console
Source Window
Button Tip
Data Window
See Section 2.1.2 [Options], page 18, for options to set these resources upon DDD invocation.
The ‘Browse’ button opens a font selection program, where you can select fonts and attributes
interactively. Clicking ‘quit’ or ‘select’ in the font selector causes all non-default values to be
transferred to the DDD font preferences panel.
The following fonts can be set using the preferences panel:
Default Font
The default DDD font to use for labels, menus, and buttons. Default is ‘liberation
sans-bold’ (similar to Helvetica Bold).
Variable Width
The variable width DDD font to use for help texts and messages. Default is
‘liberation sans-medium’ (similar to Helvetica Medium).
Fixed Width
The fixed width DDD font to use for source code, the debugger console, text fields,
and the execution window. Default is ‘liberation mono-bold’ (similar to Courier
Bold).
Data The DDD font to use for data displays. Default is ‘liberation mono-bold’. (similar
to Courier Bold).
Changes in this panel will take effect only in the next DDD session. To make it effective right
now, restart DDD (using ‘File ⇒ Restart DDD’).
Chapter 3: The DDD Windows 63
After having made changes in the panel, DDD will automatically offer you to restart itself,
such that you can see the changes taking effect.
The ‘Reset’ button restores the most recently saved preferences.
Here are the resources related to font specifications:
As all font size resources have the same class (and by default the same value), you can easily
change the default DDD font size to, say, 9.0 points by inserting a line
Ddd*FontSize: 90
in your ~/.ddd/init file.
Here’s how to specify the command to select fonts:
See Section 2.1.2 [Options], page 18, for options to set these resources upon DDD invocation.
See Section 2.1.2 [Options], page 18, for options to set these resources upon DDD invocation.
Chapter 3: The DDD Windows 65
3.6.4.6 Icons
If you frequently switch between DDD and other multi-window applications, you may like to
set ‘Edit ⇒ Preferences ⇒ General ⇒ Iconify all windows at once’. This way, all DDD
windows are iconified and deiconified as a group.
This is tied to the following resource:
If you want to keep DDD off your desktop during a longer computation, you may like to
set ‘Edit ⇒ Preferences ⇒ General ⇒ Uniconify when ready’. This way, you can iconify
DDD while it is busy on a command (e.g. running a program); DDD will automatically pop up
again after becoming ready (e.g. after the debugged program has stopped at a breakpoint). See
Section 6.4 [Program Stop], page 87, for a discussion.
Here is the related resource:
The capabilities of the settings editor depend on the capabilities of your inferior debugger.
Clicking on ‘?’ gives an an explanation on the specific item; the GDB documentation gives more
details.
Use ‘Edit ⇒ Undo’ to undo changes. Clicking on ‘Reset’ restores the most recently saved
settings.
Some debugger settings are insensitive and cannot be changed, because doing so would endan-
ger DDD operation. See the ‘gdbInitCommands’ and ‘dbxInitCommands’ resources for details.
All debugger settings (except source and object paths) are saved with DDD options.
67
To request debugging information, specify the -g option when you run the compiler.
Many C compilers are unable to handle the -g and -O options together. Using those compilers,
you cannot generate optimized executables containing debugging information.
GCC, the GNU C compiler, supports -g with or without -O, making it possible to debug
optimized code. We recommend that you always use -g whenever you compile a program. You
may think your program is correct, but there is no sense in pushing your luck.
When you debug a program compiled with -g -O, remember that the optimizer is rearranging
your code; the debugger shows you what is really there. Do not be too surprised when the
execution path does not exactly match your source file! An extreme example: if you define a
variable, but never use it, DDD never sees that variable—because the compiler optimizes it out
of existence.
In JDB, select ‘File ⇒ Open Class’ instead. This gives you a list of available classes to
choose from.
1
If you use DDD to debug Perl, Python or Bash scripts, then this section does not apply.
2
With XDB and some DBX variants, the debugged program must be specified upon invocation and cannot be
changed at run time.
68 Debugging with DDD
File Filter
File List
Directory List
Program to be opened
To re-open a recently debugged program or class, select ‘File ⇒ Open Recent’ and choose
a program or class from the list.
If no sources are found, See Section 4.3.4 [Source Path], page 70, for specifying source direc-
tories.
As a faster alternative, you can simply press mouse button 3 on the function name and select
the ‘Lookup’ item from the source popup menu.
As an even faster alternative, you can also double-click on a function call (an identifier
followed by a ‘(’ character) to lookup the function definition.
If a source file is not found, See Section 4.3.4 [Source Path], page 70, for specifying source
directories.
Argument for command buttons on the right Click here to find further occurrences of ‘tree_test’
Enabled Breakpoint
Execution Position
Disabled Breakpoint
Program Counter
Here’s how GDB accesses source files; other inferior debuggers have similar methods.
GDB has a list of directories to search for source files; this is called the source path. Each
time GDB wants a source file, it tries all the directories in the list, in the order they are present
in the list, until it finds a file with the desired name. Note that the executable search path is
not used for this purpose. Neither is the current working directory, unless it happens to be in
the source path.
If GDB cannot find a source file in the source path, and the object program records a direc-
tory, GDB tries that directory too. If the source path is empty, and there is no record of the
compilation directory, GDB looks in the current directory as a last resort.
To specify a source path for your inferior debugger, use ‘Edit ⇒ Debugger Settings’ (see
Section 3.6.5 [Debugger Settings], page 65, and search for appropriate entries (in GDB, this is
‘Search path for source files’).
Chapter 4: Navigating through the Code 71
If ‘Debugger Settings’ has no suitable entry, you can also specify a source path for the
inferior debugger when invoking DDD. See Section 2.1.4 [Inferior Debugger Options], page 25,
for details.
When using JDB, you can set the CLASSPATH environment variable to specify directories
where JDB (and DDD) should search for classes.
If DDD does not find a source file for any reason, check the following issues:
• In order to debug a program effectively, you need to generate debugging information when
you compile it. Without debugging information, the inferior debugger will be unable to
locate the source code. To request debugging information, specify the -g option when you
run the compiler. See Section 4.1 [Compiling for Debugging], page 67, for details.
• You may need to tell your inferior debugger where the source code files are. See Section 4.3.4
[Source Path], page 70, for details.
Using GDB, you can also create a local .gdbinit file that contains a line directory path.
Here, path is a colon-separated list of source paths.
Source Preferences
You can instruct DDD to indent the source code, leaving more room for breakpoints and execu-
tion glyphs. This is done using the ‘Edit ⇒ Preferences ⇒ Source ⇒ Source indentation’
slider. The default value is 0 for no indentation at all.
If your source code uses a tab width different from 8 (the default), you can set an alternate
width using the ‘Edit ⇒ Preferences ⇒ Source ⇒ Tab width’ slider.
By default, DDD caches source files in memory. This is convenient for remote debugging,
since remote file access may be slow. If you want to reduce memory usage, unset the ‘Edit ⇒
Preferences ⇒ Source ⇒ Cache source files’ option.
This is related to the following resource:
5.1 Breakpoints
5.1.1 Setting Breakpoints
You can set breakpoints by location or by name.
As an even faster alternative, you can simply double-click on the left of the source line to set
a breakpoint.
As yet another alternative, you can select ‘Source ⇒ Breakpoints’. Click on the ‘Break’
button and enter the location.
(If you find this number of alternatives confusing, be aware that DDD users fall into three
categories, which must all be supported. Novice users explore DDD and may prefer to use
76 Debugging with DDD
one single mouse button. Advanced users know how to use shortcuts and prefer popup menus.
Experienced users prefer the command line interface.)
Breakpoints are indicated by a plain stop sign, or as ‘#n’, where n is the breakpoint number.
A greyed out stop sign (or ‘_n_’) indicates a disabled breakpoint. A stop sign with a question
mark (or ‘?n?’) indicates a conditional breakpoint or a breakpoint with an ignore count set.
If you set a breakpoint by mistake, use ‘Edit ⇒ Undo’ to delete it again.
1
JDB does not support breakpoint disabling.
Chapter 5: Stopping the Program 77
Disable Breakpoint
As an alternative, you can select the breakpoint and click on ‘Disable’ or ‘Enable’ in the
Breakpoint editor (invoked through ‘Source ⇒ Breakpoints’.
Disabled breakpoints are indicated by a grey stop sign, or ‘_n_’, where n is the breakpoint
number.
The ‘Disable Breakpoint’ item is also accessible via the ‘Clear’ button. Just press and
hold mouse button 1 on the button to get a popup menu.
To set a temporary breakpoint, press mouse button 3 on the left of the source line and select
the ‘Set Temporary Breakpoint’ item from the popup menu.
As a faster alternative, you can simply double-click on the left of the source line while holding
Ctrl.
Temporary breakpoints are convenient to make the program continue up to a specific location:
just set the temporary breakpoint at this location and continue execution.
The ‘Continue Until Here’ item from the popup menu sets a temporary breakpoint on the
left of the source line and immediately continues execution. Execution stops when the temporary
breakpoint is reached.
The ‘Set Temporary Breakpoint’ and ‘Continue Until Here’ items are also accessible via
the ‘Break’ button. Just press and hold mouse button 1 on the button to get a popup menu.
2
JDB does not support temporary breakpoints.
78 Debugging with DDD
Disable Breakpoint
Breakpoint Properties
count of the breakpoint. Every breakpoint has an ignore count, which is an integer. Most of
the time, the ignore count is zero, and therefore has no effect. But if your program reaches a
breakpoint whose ignore count is positive, then instead of stopping, it just decrements the ignore
count by one and continues. As a result, if the ignore count value is n, the breakpoint does not
stop the next n times your program reaches it.
In the field ‘Ignore Count’ of the ‘Breakpoint Properties’ panel, you can specify the break-
point ignore count.4
If a breakpoint has a positive ignore count and a condition, the condition is not checked.
Once the ignore count reaches zero, DDD resumes checking the condition.
4
JDB, Perl and some DBX variants do not support breakpoint ignore counts.
5
JDB, pydb, and some DBX variants do not support breakpoint commands.
6
When glyphs are disabled (see Section 4.4 [Customizing Source], page 71), breakpoints cannot be dragged.
Delete and set breakpoints instead.
80 Debugging with DDD
Edit Properties
Condition
Ignore Count
Commands
In the breakpoint editor, you can select individual breakpoints by clicking on them. Pressing
Ctrl while clicking toggles the selection. To edit the properties of all selected breakpoints, click
on ‘Props’.
hbreak position
Sets a hardware-assisted breakpoint at position. This command requires hardware
support and some target hardware may not have this support. The main purpose of
this is EPROM/ROM code debugging, so you can set a breakpoint at an instruction
without changing the instruction.
thbreak pos
Set a temporary hardware-assisted breakpoint at pos.
5.2 Watchpoints
You can make the program stop as soon as some variable value changes, or when some variable
is read or written. This is called setting a watchpoint on a variable.7
Watchpoints have much in common with breakpoints: in particular, you can enable and
disable them. You can also set conditions, ignore counts, and commands to be executed when
a watched variable changes its value.
Please note: on architectures without special watchpoint support, watchpoints currently
make the program execute two orders of magnitude more slowly. This is so because the inferior
debugger must interrupt the program after each machine instruction in order to examine whether
the watched value has changed. However, this delay can be well worth it to catch errors when
you have no clue what part of your program is the culprit.
5.3 Interrupting
If the program is already running (see Chapter 6 [Running], page 83), you can interrupt it any
time by clicking the ‘Interrupt’ button or typing ESC in a DDD window.8 Using GDB, this is
equivalent to sending a SIGINT (Interrupt) signal.
‘Interrupt’ and ESC also interrupt a running debugger command, such as printing data.
7
Watchpoints are available in GDB and some DBX variants only. In XDB, a similar feature is available via XDB
assertions; see the XDB documentation for details.
8
If Ctrl+C is not bound to ‘Copy’ (see Section 3.1.11.2 [Customizing the Edit Menu], page 48), you can also
use Ctrl+C to interrupt the running program.
82 Debugging with DDD
You may start the debugged program with its arguments, if any, in an environment of your
choice. You may redirect your program’s input and output, debug an already running process,
or kill a child process.
Program Arguments
To run your program again, with the same arguments, select ‘Program ⇒ Run Again’ or press
the ‘Run’ button on the command tool. You may also enter run, followed by arguments at the
debugger prompt instead.
When you click on ‘Run’, your program begins to execute immediately. See Chapter 5 [Stop-
ping], page 75, for a discussion of how to arrange for your program to stop. Once your program
has stopped, you may call functions in your program to examine data. See Chapter 7 [Examining
Data], page 95, for details.
If the modification time of your symbol file has changed since the last time GDB read its
symbols, GDB discards its symbol table, and reads it again. When it does this, GDB and DDD
try to retain your current debugger state, such as breakpoints.
In GDB, the arguments are passed to a shell, which expands wildcard characters and performs
redirection of I/O, and thence to your program. Your SHELL environment variable (if it exists)
specifies what shell GDB uses. If you do not define SHELL, GDB uses ‘/bin/sh’.
If you use another inferior debugger, the exact semantics on how the arguments are inter-
preted depend on the inferior debugger you are using. Normally, the shell is used to pass the
arguments, so that you may use normal conventions (such as wildcard expansion or variable
substitution) in describing the arguments.
ps output
Selected process
Click to attach
The first thing DDD does after arranging to debug the specified process is to stop it. You
can examine and modify an attached process with all the DDD commands that are ordinarily
available when you start processes with ‘Run’. You can insert breakpoints; you can step and
continue; you can modify storage. If you would rather the process continue running, you may
use ‘Continue’ after attaching DDD to the process.
When using ‘Attach to Process’, you should first use ‘Open Program’ to specify the program
running in the process and load its symbol table.
When you have finished debugging the attached process, you can use the ‘File ⇒ Detach
Process’ to release it from DDD control. Detaching the process continues its execution. After
‘Detach Process’, that process and DDD become completely independent once more, and you
are ready to attach another process or start one with ‘Run’.
You can customize the list of processes shown by defining an alternate command to list
processes. See ‘Edit ⇒ Preferences ⇒ Helpers ⇒ List Processes’; See Section 6.3.1 [Cus-
tomizing Attaching to Processes], page 87, for details.
3
JDB, pydb, Perl, and Bash do not support attaching the debugger to running processes.
Chapter 6: Running the Program 87
DDD shows the current program status in the debugger console. The current execution
position is highlighted by an arrow.
If ‘Edit ⇒ Preferences ⇒ General ⇒ Uniconify When Ready’ is set, DDD automatically
deiconifies itself when the program stops. This way, you can iconify DDD during a lengthy
computation and have it uniconify as soon as the program stops.
Execution stops when control reaches a different line of code at the original stack level that
was executing when you clicked on ‘Next’.
‘Until’ is like ‘Next’, except that when ‘Until’ encounters a jump, it automatically continues
execution until the program counter is greater than the address of the jump.
This means that when you reach the end of a loop after single stepping though it, ‘until’
makes your program continue execution until it exits the loop. In contrast, clicking on ‘Next’
at the end of a loop simply steps back to the beginning of the loop, which forces you to step
through the next iteration.
‘Until’ always stops your program if it attempts to exit the current stack frame.
‘Until’ works by means of single instruction stepping, and hence is slower than continuing
until a breakpoint is reached.
The most common occasion to use this feature is to back up—perhaps with more breakpoints
set-over a portion of a program that has already executed, in order to examine its execution in
more detail.
To set the execution position to the current location, use ‘Set Execution Position’ from the
breakpoint popup menu. This item is also accessible by pressing and holding the ‘Break/Clear’
button.4
As a quicker alternative, you can also press mouse button 1 on the arrow and drag it to a
different location.5
4
JDB, pydb, Perl, and Bash do not support altering the execution position.
5
When glyphs are disabled (see Section 4.4 [Customizing Source], page 71), dragging the execution position is
not possible. Set the execution position explicitly instead.
Chapter 6: Running the Program 89
Click on arrow, ... ... hold mouse button and move ... ... to the final position.
Moving the execution position does not change the current stack frame, or the stack pointer,
or the contents of any memory location or any register other than the program counter.
Some inferior debuggers (notably GDB) allow you to set the new execution position into a
different function from the one currently executing. This may lead to bizarre results if the two
functions expect different patterns of arguments or of local variables. For this reason, moving
the execution position requests confirmation if the specified line is not in the function currently
executing.
After moving the execution position, click on ‘Continue’ to resume execution.
function in which execution is actually occurring is called the innermost frame. This is the most
recently created of all the stack frames that still exist.
Inside your program, stack frames are identified by their addresses. A stack frame consists
of many bytes, each of which has its own address; each kind of computer has a convention for
choosing one byte whose address serves as the address of the frame. Usually this address is kept
in a register called the frame pointer register while execution is going on in that frame.
GDB assigns numbers to all existing stack frames, starting with zero for the innermost frame,
one for the frame that called it, and so on upward. These numbers do not really exist in your
program; they are assigned by GDB to give you a way of designating stack frames in GDB
commands.
6.7.2 Backtraces
DDD provides a backtrace window showing a summary of how your program got where it is. It
shows one line per frame, for many frames, starting with the currently executing frame (frame
zero), followed by its caller (frame one), and on up the stack.
To enable the backtrace window, select ‘Status ⇒ Backtrace’.
Calling functions
Called functions
Using GDB, each line in the backtrace shows the frame number and the function name. The
program counter value is also shown—unless you use the GDB command ‘set print address
off’. The backtrace also shows the source file name and line number, as well as the arguments
to the function. The program counter value is omitted if it is at the beginning of the code for
that line number.
The ‘Down’ button selects the function that was called by the current one—that is, it moves
one frame down.
You can also directly type the up and down commands at the debugger prompt. Typing
Ctrl+Up and Ctrl+Down, respectively, will also move you through the stack.
‘Up’ and ‘Down’ actions can be undone via ‘Edit ⇒ Undo’.
threads of a single program are akin to multiple processes—except that they share one address
space (that is, they can all examine and modify the same variables). On the other hand, each
thread has its own registers and execution stack, and perhaps private memory.
For debugging purposes, DDD lets you display the list of threads currently active in your
program and lets you select the current thread —the thread which is the focus of debugging.
DDD shows all program information from the perspective of the current thread.7
Current thread
Selecting Threads
To view all currently active threads in your program, select ‘Status ⇒ Threads’. The current
thread is highlighted. Select any thread to make it the current thread.
Using JDB, additional functionality is available:
• Select a thread group to switch between viewing all threads and the threads of the selected
thread group;
• Click on ‘Suspend’ to suspend execution of the selected threads;
• Click on ‘Resume’ to resume execution of the selected threads.
For more information on threads, see the JDB and GDB documentation (see Section “Debug-
ging Programs with Multiple Threads” in Debugging with GDB).
GDB has the ability to detect any occurrence of a signal in your program. You can tell GDB
in advance what to do for each kind of signal.
Normally, DDD is set up to ignore non-erroneous signals like SIGALRM (so as not to interfere
with their role in the functioning of your program) but to stop your program immediately
whenever an error signal happens. In DDD, you can view and edit these settings via ‘Status ⇒
Signals’.
‘Status ⇒ Signals’ pops up a panel showing all the kinds of signals and how GDB has been
told to handle each one. The settings available for each signal are:
Stop If set, GDB should stop your program when this signal happens. This also implies
‘Print’ being set.
Print If set, GDB should print a message when this signal happens.
If unset, GDB should not mention the occurrence of the signal at all. This also
implies ‘Stop’ being unset.
Pass If set, GDB should allow your program to see this signal; your program can handle
the signal, or else it may terminate if the signal is fatal and not handled.
If unset, GDB should not allow your program to see this signal.
The entry ‘All Signals’ is special. Changing a setting here affects all signals at once—except
those used by the debugger, typically SIGTRAP and SIGINT.
To undo any changes, use ‘Edit ⇒ Undo’. The ‘Reset’ button restores the saved settings.
94 Debugging with DDD
When a signal stops your program, the signal is not visible until you continue. Your program
sees the signal then, if ‘Pass’ is in effect for the signal in question at that time. In other words,
after GDB reports a signal, you can change the ‘Pass’ setting in ‘Status ⇒ Signals’ to control
whether your program sees that signal when you continue.
You can also cause your program to see a signal it normally would not see, or to give it any
signal at any time. The ‘Send’ button will resume execution where your program stopped, but
immediately give it the signal shown.
On the other hand, you can also prevent your program from seeing a signal. For example,
if your program stopped due to some sort of memory reference error, you might store correct
values into the erroneous variables and continue, hoping to see more execution; but your program
would probably terminate immediately as a result of the fatal signal once it saw the signal. To
prevent this, you can resume execution using ‘Commands ⇒ Continue Without Signal’.
Signal settings are not saved across DDD invocations, since changed signal settings are nor-
mally useful within specific projects only. Instead, signal settings are saved with the current
session, using ‘File ⇒ Save Session As’.
7 Examining Data
DDD provides several means to examine data.
• The quickest way to examine variables is to move the pointer on an occurrence in the source
text. The value is displayed in the source line; after a second, a popup window (called value
tip) shows the variable value. This is useful for quick examination of several simple values.
• If you want to refer to variable values at a later time, you can print the value in the debugger
console. This allows for displaying and examining larger data structures.
• If you want to examine complex data structures, you can display them graphically in the
data window. Displays remain effective until you delete them; they are updated each time
the program stops. This is useful for large dynamic structures.
• If you want to examine arrays of numeric values, you can plot them graphically in a separate
plot window. The plot is updated each time the program stops. This is useful for large
numeric arrays.
• Using GDB or DBX, you can also examine memory contents in any of several formats,
independently of your program’s data types.
You can disable value tips via ‘Edit ⇒ Preferences ⇒ General ⇒ Automatic display of
variable values as popup tips’.
You can disable displaying variable values in the status line via ‘Edit ⇒ Preferences ⇒
General ⇒ Automatic display of variable values in the status line’.
These customizations are tied to the following resources:
96 Debugging with DDD
You can turn off value tips via ‘Edit ⇒ Preferences ⇒ General ⇒ Automatic Display
of Variable Values’.
In GDB, the ‘Print’ button generates a print command, which has several more options.
See Section “Examining Data” in Debugging with GDB, for GDB-specific expressions, variables,
and output formats.
Displaying Data
As a shorter alternative, you can simply press mouse button 3 on the variable name and
select ‘Display’ from the popup menu.
As an even faster alternative, you can also double-click on the variable name.
As another alternative, you may also enter the expression to be displayed in the argument
field and press the ‘Display’ button.
Finally, you may also type in a command at the debugger prompt:
graph display expr [clustered] [at (x, y)]
[dependent on display] [[now or] when in scope]
This command creates a new display showing the value of the expression expr. The optional
parts have the following meaning:
clustered
If given, the new display is created in a cluster. See Section 7.3.1.9 [Clustering],
page 103, for a discussion.
at (x, y) If given, the new display is created at the position (x, y). Otherwise, a default
position is assigned.
dependent on display
If given, an edge from the display numbered or named display to the new display
is created. Otherwise, no edge is created. See Section 7.3.4.1 [Dependent Values],
page 108, for details.
98 Debugging with DDD
when in scope
now or when in scope
If ‘when in’ is given, the display creation is deferred until execution reaches the
given scope (a function name, as in the backtrace output).
If ‘now or when in’ is given, DDD first attempts to create the display immediately.
The display is deferred only if display creation fails.
If neither ‘when in’ suffix nor ‘now or when in’ suffix is given, the display is created
immediately.
Selection rectangle
When pressing and holding mouse button 1 on the ‘Show/Hide’ button, a menu pops up with
even more alternatives:
Show More ()
Shows details of all aggregates currently hidden, but not of their sub-aggregates.
You can invoke this item several times in a row to reveal more and more details of
the selected aggregate.
Show Just ()
Shows details of the selected aggregate, but hides all sub-aggregates.
Show All ()
Shows all details of the selected aggregate and of its sub-aggregates. This item is
equivalent to the ‘Show’ button.
Hide () Hide all details of the selected aggregate. This item is equivalent to the ‘Hide’
button.
As a faster alternative, you can also press mouse button 3 on the aggregate and select the
appropriate menu item.
As an even faster alternative, you can also double-click mouse button 1 on a value. If some
part of the value is hidden, more details will be shown; if the entire value is shown, double-
clicking will hide the value instead. This way, you can double-click on a value until you get the
right amount of details.
If all details of a display are hidden, the display is called disabled; this is indicated by the
string ‘(Disabled)’.
Displays can also be disabled or enabled via a DDD command, which you enter at the debugger
prompt:
graph disable display displays...
disables the given displays.
graph enable display displays...
re-enables the given displays.
In both commands, displays. . . is either
• a space-separated list of display numbers to disable or enable, or
• a single display name. If you specify a display by name, all displays with this name will be
affected.
Use ‘Edit ⇒ Undo’ to undo disabling or enabling displays.
100 Debugging with DDD
Rotating an Array
Local arguments
Dereference
via popup menu
Dereferenced pointer
Click here...
Refreshing status displays at each stop takes time; you should delete status displays as soon
as you don’t need them any more.
102 Debugging with DDD
Data Preferences
Note that changing the placement of new displays also affects the placement of dependent
displays (see Section 7.3.4.1 [Dependent Values], page 108). In top to bottom mode, dependent
displays are created on the right of the originating display; in left to right mode, dependent
displays are created on the below the originating display.
Chapter 7: Examining Data 103
Displays
ii = 7
bit1 = 1 1: uni 2: guni 3: pi
uni =
bit2 = 3 ii = 7
u = {...} ii = 1 3.14159274
bit1 = 1 {...}
ii = 1 bit2 = 3 {...}
u = {...} 4: sqrt2
guni = {...}
{...} 1.4142135623730951
pi = 3.14159274
sqrt2 = 1.4142135623730951
Displays in a cluster can be selected and manipulated like parts of an ordinary display; in
particular, you can show and hide details, or dereference pointers. However, edges leading to
clustered displays can not be shown, and you must either select one or all clustered displays.
Disabling a cluster is called unclustering, and again, there are two ways of doing it:
• You can uncluster displays manually, by selecting the cluster and choosing ‘Undisp ⇒
Uncluster ()’.
• You can uncluster all current and future displays by disabling ‘Edit ⇒ Preferences ⇒
Data ⇒ Placement ⇒ clustered’.
Selected Display
The Display Editor shows the properties of each display, using the following fields:
‘Num’ The display number.
‘Expression’
The displayed expression.
‘State’ One of
‘enabled’ Normal state.
‘disabled’
Disabled; all details are hidden. Use ‘Show’ to enable.
‘not active’
Out of scope.
‘deferred’
Will be created as soon as its ‘Scope’ is reached (see Section 7.3.1.1
[Creating Single Displays], page 97).
‘clustered’
Part of a cluster (see Section 7.3.1.9 [Clustering], page 103). Use ‘Undisp
⇒ Uncluster’ to uncluster.
Chapter 7: Examining Data 105
‘alias of display’
A suppressed alias of display display (see Section 7.3.4.3 [Shared Struc-
tures], page 108).
‘Scope’ The scope in which the display was created. For deferred displays, this is the scope
in which the display will be created.
‘Address’ The address of the displayed expression. Used for resolving aliases (see
Section 7.3.4.3 [Shared Structures], page 108).
value = 7
_name = 0x804a8c0 "Ada"
_left = 0x804eb80
_right = 0x804ec10
left_thread = false
2: tree *() right_thread = false
(Tree *) 0x804eb50 day_of_week = Thu Normal Data Display
day = 1
date = month = 1
year = 1970
_vptr. = 0x804ba84
shared = 4711
value = 7
2: tree *() _name = 0x804a8c0 "Ada" Suppressed members
(Tree *) 0x804eb50 _left = 0x804eb80
_right = 0x804ec10
Suppressing Values
To delete several displays at once, use the ‘Undisp’ button in the Display Editor (invoked
via ‘Data ⇒ Displays’). Select any number of display items in the usual way and delete them
by pressing ‘Undisp’.
As an alternative, you can also use a DDD command:
graph undisplay displays...
Here, displays. . . is either
• a space-separated list of display numbers to disable or enable, or
• a single display name. If you specify a display by name, all displays with this name will be
affected.
If you are using stacked windows, deleting the last display from the data window also auto-
matically closes the data window. (You can change this via ‘Edit ⇒ Preferences ⇒ Data ⇒
Close data window when deleting last display’.)
106 Debugging with DDD
Finally, you can also cut, copy, and paste displays using the ‘Cut’, ‘Copy’, and ‘Paste’ items
from the ‘Edit’ menu. The clipboard holds the commands used to create the displays; ‘Paste’
inserts the display commands in the debugger console. This allows you to save displays for later
usage or to copy displays across multiple DDD instances.
7.3.2 Arrays
DDD has some special features that facilitate handling of arrays.
Using DDD, you can display slices using the ‘from..to’ notation (see Section 7.3.1.10 [Creat-
ing Multiple Displays], page 103). But this requires that you already know from and to; it is also
inefficient to create several single displays. If you use GDB, you have yet another alternative.
Using GDB, you can display successive objects by referring to a contiguous span of memory
as an artificial array, using the binary operator ‘@’. The left operand of ‘@’ should be the first
element of the desired array and be an individual object. The right operand should be the
desired length of the array. The result is an array value whose elements are all of the type of the
left argument. The first element is actually the left argument; the second element comes from
bytes of memory immediately following those that hold the first element, and so on.
print array[0]@len
where array is the name of the array to display, first is the index of the first element, and nelems
is the number of elements to display.
The left operand of ‘@’ must reside in memory. Array values made with ‘@’ in this way
behave just like other arrays in terms of subscripting, and are coerced to pointers when used in
expressions.
Repeated Value
The default GDB threshold for repeated array values is 10. You can change it via ‘Edit ⇒
GDB Settings ⇒ Threshold for repeated print elements’. Setting the threshold to 0 will
cause GDB (and DDD) to display each array element individually. Be sure to refresh the data
window via ‘Data ⇒ Refresh Displays’ after a change in GDB settings.
You can also configure DDD to display each array element individually:
To change the value of a variable, enter its name in ‘()’—for instance, by selecting an
occurrence or a display. Then, click on the ‘Set’ button. In a dialog, you can edit the variable
value at will; clicking the ‘OK’ or ‘Apply’ button commits your change and assigns the new value
to the variable.
1
This requires that the full array size is known to the debugger.
2
JDB 1.1 does not support changing variable values.
108 Debugging with DDD
Select to set
To change a displayed value, you can also select ‘Set Value’ menu from the data popup
menu,
If you made a mistake, you can use ‘Edit ⇒ Undo’ to re-set the variable to its previous value.
object ‘d’, the data displays ‘d’, ‘*p1’, and ‘*p2’ will be separate, although they denote the same
object.
DDD provides a special mode which makes it detect these situations. DDD recognizes if
two or more data displays are stored at the same physical address, and if this is so, merges all
these aliases into one single data display, the original data display. This mode is called Alias
Detection; it is enabled via ‘Data ⇒ Detect Aliases’.
When alias detection is enabled, DDD inquires the memory location (the address) of each
data display after each program step. If two displays have the same address, they are merged
into one. More specifically, only the one which has least recently changed remains (the original
data display); all other aliases are suppressed, i.e. completely hidden. The edges leading to the
aliases are replaced by edges leading to the original data display.
An edge created by alias detection is somewhat special: rather than connecting two displays
directly, it goes through an edge hint, describing an arc connecting the two displays and the
edge hint.
Each edge hint is a placeholder for a suppressed alias; selecting an edge hint is equivalent to
selecting the alias. This way, you can easily delete display aliases by simply selecting the edge
hint and clicking on ‘Undisp’.
To access suppressed display aliases, you can also use the Display Editor. Suppressed displays
are listed in the Display Editor as aliases of the original data display. Via the Display Editor,
you can select, change, and delete suppressed displays.
Suppressed displays become visible again as soon as
• alias detection is disabled,
• their address changes such that they are no more aliases, or
• the original data display is deleted, such that the least recently changed alias becomes the
new original data display.
Please note the following caveats with alias detection:
• Alias detection requires that the current programming language provides a means to de-
termine the address of an arbitrary data object. Currently, only C, C++, and Java are
supported.
110 Debugging with DDD
• Some inferior debuggers (for instance, SunOS DBX) produce incorrect output for address
expressions. Given a pointer p, you may verify the correct function of your inferior debugger
by comparing the values of p and ‘&p’ (unless p actually points to itself). You can also
examine the data display addresses, as shown in the Display Editor.
• Alias detection slows down DDD slightly, which is why you can turn it off. You may consider
to enable it only at need—for instance, while examining some complex data structure—and
disable it while examining control flow (i.e., stepping through your program). DDD will
automatically restore edges and data displays when switching modes.
The ‘Other’ entry in the shortcut menu lets you create a new display that extends the shortcut
menu.
As an example, assume you have selected a display named ‘date_ptr’. Selecting ‘Display ⇒
Other’ pops up a dialog that allows you to enter a new expression to be displayed—for instance,
you can cast the display ‘date_ptr’ to a new display ‘(char *)date_ptr’. If the ‘Include in
‘New Display’ Menu’ toggle was activated, the shortcut menu will then contain a new entry
‘Display (char *)()’ that will cast any selected display display to ‘(char *)display’. Such
shortcuts can save you a lot of time when examining complex data structures.
Chapter 7: Examining Data 111
You can edit the contents of the ‘New Display’ menu by selecting its ‘Edit Menu’ item. This
pops up the Shortcut Editor containing all shortcut expressions, which you can edit at leisure.
Each line contains the expression for exactly one menu item. Clicking on ‘Apply’ re-creates the
‘New Display’ menu from the text. If the text is empty, the ‘New Display’ menu will be empty,
too.
DDD also allows you to specify individual labels for user-defined buttons. You can write such
a label after the expression, separated by ‘//’. This feature is used in the default contents of
the GDB ‘New Display’ menu, where each of the base conversions has a label:
/t () // Convert to Bin
/d () // Convert to Dec
112 Debugging with DDD
/x () // Convert to Hex
/o () // Convert to Oct
Feel free to add other conversions here. DDD supports up to 20 ‘New Display’ menu items.
The shortcut menu is controlled by the following resources:
‘Tiny Values’
If enabled, display values in a tiny font. This could be combined with a pattern like
*\[*\] to make all array members tiny. Apply this theme to display values in a
tiny font.
‘Suppress Values’
If enabled, the given value will be suppressed. This should be combined with a
pattern like *->X to suppress all members named ‘X’. Apply this theme to display
values not at all.
‘Red Background’
Use this with a self-defined button associated with the command graph apply
red.vsl "()"
‘Green background’
Use this with a self-defined button associated with the command graph apply
green.vsl "()".
Ddd*dataButtons: \
graph display ($eflags & 1) != 0 // c\n\
graph display ($eflags & 64) != 0 // z\n\
graph display ($eflags & 128) != 0 // s\n\
graph display ($eflags & 1024) != 0 // d\n\
graph display ($eflags & 2048) != 0 // o\n\
graph display $eax & 255 // al\n\
graph display $eax >> 8 & 255 // ah\n\
graph display $eax & 65535 // ax\n\
graph display $ebx & 255 // bl\n\
graph display $ebx >> 8 & 255 // bh\n\
graph display $ebx & 65535 // bx\n\
graph display $ecx & 255 // cl\n\
graph display $ecx >> 8 & 255 // ch\n\
graph display $ecx & 65535 // cx\n\
graph display $edx & 255 // dl\n\
graph display $edx >> 8 & 255 // dh\n\
graph display $edx & 65535 // dx
Whenever the these displays is shown, the title will be replaced by a more intuitive
title like “carry”, or “zero” for one of the flag bits and “al” “ax”, etc. for one of the
registers.
1: twodim
0x804a918 "Pioneering" 0x804a92c "computer"
Normal Data Display
0x804a923 "women" 0x804a935 "science"
0x804a929 "in" 0x804a93d "!"
1: twodim
0x804a918 "Pioneering" 0x804a92c "computer"
Red and Green Backgrounds
0x804a923 "women" 0x804a935 "science"
0x804a929 "in" 0x804a93d "!"
1: twodim
0x804a918 "Pioneering" 0x804a92c "computer"
Small Titles
0x804a923 "women" 0x804a935 "science"
0x804a929 "in" 0x804a93d "!"
1: twodim
0x804a918 "Pioneering" 0x804a92c "computer"
Small Values
0x804a923 "women" 0x804a935 "science"
0x804a929 "in" 0x804a93d "!"
1: twodim
0x804a918 "Pioneering" 0x804a92c "computer"
0x804a923 "women" 0x804a935 "science" Tiny Values
0x804a929 "in" 0x804a93d "!"
1: twodim
0x804a92c "computer"
0x804a935 "science" Suppress Values
0x804a93d "!"
On the other hand, if you want to highlight one single value only, you’d apply the theme Red
Background on only one single value.
If you find this confirmation annoying, you can define a command button which directly
applies the theme. See Section 10.5 [Defining Commands], page 139, for details on defining
commands.
Applying and unapplying themes is associated with the following commands:
graph apply theme name pattern
applies the theme name on pattern.
graph unapply theme name pattern
unapplies the theme name on pattern.
graph toggle theme name pattern
applies the theme name on pattern if it was not already applied, and unapplies it otherwise.
If your DDD source distribution is installed in /opt/src, you can use the following settings
to read the VSL library from /home/joe/ddd.vsl:
Ddd*vslLibrary: /home/joe/ddd.vsl
Ddd*vslPath: user_themes:.:/opt/src/ddd/ddd:/opt/src/ddd/vsllib
Chapter 7: Examining Data 117
VSL include files referenced by /home/joe/ddd.vsl are searched first in the current
directory ., then in your theme directory, then in /opt/src/ddd/ddd/, and then in
/opt/src/ddd/vsllib/.
Instead of supplying another VSL library, it is often easier to specify some minor changes to
the built-in library (see Section 7.3.5.4 [Writing Data Themes], page 115).
See Section 2.1.2 [Options], page 18, for the --scrolled-graph-editor and --panned-
graph-editor options.
Layouting the graph may introduce edge hints; that is, edges are no more straight lines, but
lead to an edge hint and from there to their destination. Edge hints can be moved around like
arbitrary displays.
To enable a more compact layout, you can set the ‘Edit ⇒ Preferences ⇒ Data ⇒
Compact Layout’ option. This realizes an alternate layout algorithm, where successors are placed
next to their parents. This algorithm is suitable for homogeneous data structures only.
You can enforce layout by setting ‘Edit ⇒ Preferences ⇒ Data ⇒ Automatic Layout’. If
automatic layout is enabled, the graph is layouted after each change.
Click to print
Printing displays
To print the graph on a PostScript printer, select ‘File ⇒ Print Graph’. Enter the printing
command in the ‘Print Command’ field. Click on the ‘OK’ or the ‘Apply’ button to start printing.
As an alternative, you may also print the graph in a file. Click on the ‘File’ button and
enter the file name in the ‘File Name’ field. Click on the ‘Print’ button to create the file.
When the graph is printed in a file, two formats are available:
• ‘PostScript’—suitable for enclosing the graph in another document;
• ‘FIG’—suitable for post-processing, using the xfig graphic editor, or for conversion into
other formats (among others, IBMGL, TEX, PIC), using the transfig or fig2dev programs.
next
A 1−D Array
Change Style
A 2−D Array
Rotate View
display histories can be plotted, too. The menu item ‘Plot ⇒ Plot history of ()’ creates a
plot that shows all previously recorded values of the selected display.
Memory Dump
as Status Display
Examining Memory
Chapter 7: Examining Data 125
8 Machine-Level Debugging
Sometimes, it is desirable to examine a program not only at the source level, but also at the
machine level. DDD provides special machine code and register windows for this task.
Assembler instructions
The machine code window works very much like the source window. You can set, clear, and
change breakpoints by selecting the address and pressing a ‘Break’ or ‘Clear’ button; the usual
popup menus are also available. Breakpoints and the current execution position are displayed
simultaneously in both source and machine code.
The ‘Lookup’ button can be used to look up the machine code for a specific function—or the
function for a specific address. Just click on the location in one window and press ‘Lookup’ to
see the corresponding code in the other window.
If source code is not available, only the machine code window is updated.
You can customize various aspects of the disassembling window. See Section 8.4 [Customizing
Machine Code], page 128, for details.
To execute just one machine instruction, click on the ‘Stepi’ button or select ‘Program ⇒
Step Instruction’.
To continue to the next instruction in the current function, click on the ‘Nexti’ button
select ‘Program ⇒ Next Instruction’.. This is similar to ‘Stepi’, but any subroutine calls are
executed without stopping.
Using GDB, it is often useful to do
graph display /i $pc
when stepping by machine instructions. This makes DDD automatically display the next in-
struction to be executed, each time your program stops.
Select register
By selecting one of the registers, its name is copied to the argument field. You can use it as
value for ‘Display’, for instance, to have its value displayed in the data window.
2
The machine code window is available with GDB and some DBX variants only.
129
You can keep disassembled code in memory, using ‘Edit ⇒ Preferences ⇒ Source ⇒
Cache Machine Code’:
You can control the indentation of machine code, using ‘Edit ⇒ Preferences ⇒ Source ⇒
Machine Code Indentation’:
This ~/.ddd/init setting invokes an editing session for an XEmacs editor running gnuserv:
Ddd*editCommand: gnuclient +@LINE@ @FILE@
This ~/.ddd/init setting invokes an editing session for an Emacs editor running
emacsserver:
Ddd*editCommand: emacsclient +@LINE@ @FILE@
9.2 Recompiling
To recompile the source code using make, you can select ‘File ⇒ Make’. This pops up a dialog
where you can enter a Make Target—typically the name of the executable. Clicking on the
‘Make’ button invokes the make program with the given target.
The ‘Make’ button on the command tool re-invokes make with the most recently given argu-
ments.
132 Debugging with DDD
9.3 Patching
Using GDB, you can open your program’s executable code (and the core file) for both reading
and writing. This allows alterations to machine code, such that you can intentionally patch your
program’s binary. For example, you might want to turn on internal debugging flags, or even to
make emergency repairs.
Note that depending on your operating system, special preparation steps, such as setting
permissions, may be needed before you can change executable files.
To patch the binary, enable ‘Edit ⇒ GDB Settings ⇒ Writing into executable and core
files’. This makes GDB open executable and core files for both reading and writing. If you
have already loaded a file, you must load it again (using ‘Edit ⇒ Open File’ or ‘Edit ⇒ Open
Core’), for your new setting to take effect.
Be sure to turn off ‘Writing into executable and core files’ as soon as possible, to pre-
vent accidental alterations to machine code.
133
After displaying the available possibilities, GDB copies your partial input (‘b make_’ in the
example) so you can finish the command—by pressing TAB again, or by entering the remainder
manually.
Sometimes the string you need, while logically a “word”, may contain parentheses or other
characters that GDB normally excludes from its notion of a word. To permit word completion
to work in this situation, you may enclose words in ’ (single quote marks) in GDB commands.
The most likely situation where you might need this is in typing the name of a C++ function.
This is because C++ allows function overloading (multiple definitions of the same function,
distinguished by argument type). For example, when you want to set a breakpoint you may need
to distinguish whether you mean the version of name that takes an int parameter, name(int), or
the version that takes a float parameter, name(float). To use the word-completion facilities
in this situation, type a single quote ’ at the beginning of the function name. This alerts GDB
that it may need to consider more information than usual when you press TAB to request word
completion:
(gdb) b ’bubble(_TAB
bubble(double,double) bubble(int,int)
(gdb) b ’bubble(_
In some cases, DDD can tell that completing a name requires using quotes. When this
happens, DDD inserts the quote for you (while completing as much as it can) if you do not type
the quote in the first place:
(gdb) b bub_TAB
DDD alters your input line to the following, and rings a bell:
(gdb) b ’bubble(_
In general, DDD can tell that a quote is needed (and inserts it) if you have not yet started typing
the argument list when you ask for completion on an overloaded symbol.
If you prefer to use the TAB key for switching between items, unset ‘Edit ⇒ Preferences
⇒ General ⇒ TAB Key completes in All Windows’. This is useful if you have pointer-driven
keyboard focus (see below) and no special usage for the TAB key. If the option is set, the TAB
key completes in the debugger console only.
If you enter an empty line (just use Return at the debugger prompt), the last command is
repeated as well.
Position in History
You can search for previous commands by pressing Ctrl+B. This invokes incremental search
mode, where you can enter a string to be searched in previous commands. Press Ctrl+B again
to repeat the search, or Ctrl+F to search in the reverse direction. To return to normal mode,
press ESC, or use any cursor command.
The command history is automatically saved when exiting DDD. You can turn off this feature
by setting the following resource to ‘off’:
saveHistoryOnExit (class SaveOnExit) [Resource]
If ‘on’ (default), the command history is automatically saved when DDD exits.
commands, csh-like history substitution, and a storage and recall of command history across
debugging sessions. See Section “Command Line Editing” in Debugging with GDB, for details
on command-line editing via the TTY interface.
button named ‘Print i’ will now appear below the debugger console—try it! To remove the
button, reopen the button editor, clear the ‘print i’ line and press ‘OK’ again.
If a button command contains ‘()’, the string ‘()’ will automatically be replaced by the
contents of the argument field. For instance, a button named ‘return ()’ will execute the GDB
‘return’ command with the current content of the argument field as argument.
By default, DDD disables buttons whose commands are not supported by the inferior debug-
ger. To enable such buttons, unset the ‘Enable supported buttons only’ toggle in the button
editor.
DDD also allows you to specify control sequences and special labels for user-defined buttons.
See Section 10.4.1 [Customizing Buttons], page 137, for details.
• The string specified in the ‘labelDelimiter’ resource (usually ‘//’) separates the com-
mand name from the button label. If no button label is specified, the capitalized com-
mand will be used as button label.
The following button names are reserved:
‘Apply’ Send the given command to the debugger.
‘Back’ Lookup previously selected source position.
‘Clear’ Clear current command
‘Complete’
Complete current command.
‘Edit’ Edit current source file.
‘Forward’ Lookup next selected source position.
‘Make’ Invoke the ‘make’ program, using the most recently given arguments.
‘Next’ Show next command
‘No’ Answer current debugger prompt with ‘no’. This button is visible only if the
debugger asks a yes/no question.
‘Prev’ Show previous command
‘Reload’ Reload source file.
‘Yes’ Answer current debugger prompt with ‘yes’. This button is visible only if the
debugger asks a yes/no question.
The default resource value is empty—no console buttons are created.
Here are some examples to insert into your ~/.ddd/init file. These are the settings of DDD
1.x:
Ddd*consoleButtons: Yes\nNo\nbreak^C
This setting creates some more buttons:
Ddd*consoleButtons: \
Yes\nNo\nrun\nClear\nPrev\nNext\nApply\nbreak^C
See also the ‘dataButtons’, ‘sourceButtons’ and ‘toolButtons’ resources.
Back\nForward\nEdit\ninterrupt^C
This setting creates some buttons which are not found on the command tool:
Ddd*sourceButtons: \
print *()\ngraph display *()\nprint /x ()\n\
whatis ()\nptype ()\nwatch ()\nuntil\nshell
An even more professional setting uses customized button labels.
Ddd*sourceButtons: \
print *(()) // Print *()\n\
graph display *(()) // Display *()\n\
print /x ()\n\
whatis () // What is ()\n\
ptype ()\n\
watch ()\n\
until\n\
shell
See also the ‘consoleButtons’ and ‘dataButtons’ resources, above, and the ‘toolButtons’
resource, below.
When user-defined GDB commands are executed, the commands of the definition are not
printed. An error in any command stops execution of the user-defined command.1
1
If you use DDD commands within command definitions, or if you include debugger commands that resume
execution, these commands will be realized transparently as auto-commands—that is, they won’t be executed
Chapter 10: The Command-Line Interface 141
If used interactively, commands that would ask for confirmation proceed without asking when
used inside a user-defined command. Many GDB commands that normally print messages to
say what they are doing omit the messages when used in a user-defined command.
Command definitions are saved across DDD sessions.
directly by the inferior debugger, but result in a command string being sent to DDD. This command string is
then interpreted by DDD and sent back to the inferior debugger, possibly prefixed by some other commands
such that DDD can update its state. See Section 10.5.3 [Commands with Other Debuggers], page 141, for a
discussion.
142 Debugging with DDD
inferior debugger. For instance, if your the user-defined command ‘bp’ sets a breakpoint,
DDD may not display it immediately, because DDD does not know that ‘bp’ changes the
breakpoint state.
• You cannot use DDD ‘graph’ commands within user-defined commands. This is only nat-
ural, because user-defined commands are interpreted by the inferior debugger, which does
not know about DDD commands.
As a solution, DDD provides a simple facility called auto-commands. If DDD receives any
output from the inferior debugger in the form ‘prefix command’, it will interpret command as
if it had been entered at the debugger prompt. prefix is a user-defined string, for example ‘ddd:
’.
Suppose you want to define a command gd that serves as abbreviation for graph display.
All the command gd has to do is to issue a string
ddd: graph display argument
where argument is the argument given to gd. Using GDB, this can be achieved using the
echo command. In your ~/.gdbinit file, insert the lines
define gd
echo ddd: graph display $arg0\n
end
To complete the setting, you must also set the ‘autoCommandPrefix’ resource to the ‘ddd: ’
prefix you gave in your command. In ~/.ddd/init, write:
Ddd*autoCommandPrefix: ddd:\
(Be sure to leave a space after the trailing backslash.)
Entering gd foo will now have the same effect as entering graph display foo at the debugger
prompt.
Please note: In your commands, you should choose some other prefix than ‘ddd: ’. This is
because auto-commands raise a security problem, since arbitrary commands can be executed.
Just imagine some malicious program issuing a string like ‘prefix shell rm -fr ~’ when being
debugged! As a consequence, be sure to choose your own prefix; it must be at least three
characters long.
143
A.1 Actions
The following DDD actions may be used in translation tables.
graph-dereference () [Action]
Dereference the selected display.
graph-detail () [Action]
Show or hide detail of the selected display.
graph-rotate () [Action]
Rotate the selected display.
graph-dependent () [Action]
Pop up a dialog to create a dependent display.
normalize () [Action]
Place all nodes on their positions and redraw the graph.
select () [Action]
Select the node pointed at. Clear all other selections. Bound to a button down event.
select-all () [Action]
Select all nodes in the graph.
select-first () [Action]
Select the first node in the graph.
select-next () [Action]
Select the next node in the graph.
select-or-move () [Action]
Select the node pointed at. Clear all other selections. Bound to a button down event. If the
pointer is dragged, move the selected node.
Appendix A: Application Defaults 145
select-prev () [Action]
Select the previous node in the graph.
show-edges ([any|both|from|to]) [Action]
Show some edges. any means to process all edges where either source or target node are
selected. both means to process all edges where both nodes are selected. from means to
process all edges where at least the source node is selected. to means to process all edges
where at least the target node is selected. Default is any.
snap-to-grid () [Action]
Place all nodes on the nearest grid position.
toggle () [Action]
Toggle the current selection—if the node pointed at is selected, it will be unselected, and vice
versa. Bound to a button down event.
toggle-or-move () [Action]
Toggle the current selection—if the node pointed at is selected, it will be unselected, and vice
versa. Bound to a button down event. If the pointer is dragged, move the selection.
unselect-all () [Action]
Clear the selection.
gdb-end-of-line () [Action]
Move cursor to the end of the current line. Bound to End.
gdb-forward-character () [Action]
Move one character to the right. Bound to Right.
gdb-insert-graph-arg () [Action]
Insert the contents of the data display argument field ‘()’.
gdb-insert-source-arg () [Action]
Insert the contents of the source argument field ‘()’.
gdb-interrupt () [Action]
If DDD is in incremental search mode, exit it; otherwise call gdb-control(^C).
gdb-isearch-prev () [Action]
Enter reverse incremental search mode. Bound to Ctrl+B.
gdb-isearch-next () [Action]
Enter incremental search mode. Bound to Ctrl+F.
gdb-isearch-exit () [Action]
Exit incremental search mode. Bound to ESC.
gdb-next-history () [Action]
Recall next command from history. Bound to Down.
gdb-prev-history () [Action]
Recall previous command from history. Bound to Up.
gdb-previous-history () [Action]
Recall previous command from history. Bound to Up.
gdb-process ([action [, args. . . ]]) [Action]
Process the given event in the debugger console. Bound to key events in the source and data
window. If this action is bound to the source window, and the source window is editable,
perform action(args...) on the source window instead; if action is not given, perform
‘self-insert()’.
gdb-select-all () [Action]
If the ‘selectAllBindings’ resource is set to Motif, perform ‘beginning-of-line’. Other-
wise, perform ‘select-all’. Bound to Ctrl+A.
gdb-set-line (value) [Action]
Set the current line to value. Bound to Ctrl+U.
• If this action is taken in the source text, and the next character following the current
selection is ‘(’, invoke ‘gdb-command(function-action)’. If function-action is not given,
it defaults to ‘list ()’.
• Otherwise, invoke ‘gdb-command(text-action)’. If text-action is not given, it defaults
to ‘graph display ()’.
source-drag-glyph () [Action]
Initiate a drag on the glyph at cursor position.
source-drop-glyph ([action]) [Action]
Drop the dragged glyph at cursor position. action is either ‘move’, meaning to move the
dragged glyph, or ‘copy’, meaning to copy the dragged glyph. If no action is given, ‘move’ is
assumed.
source-end-select-word () [Action]
End selecting a word.
source-follow-glyph () [Action]
Continue a drag on the glyph at cursor position. Usually bound to some motion event.
source-popup-menu () [Action]
Pop up a menu, depending on the location.
source-set-arg () [Action]
Set the argument field to the current selection. Typically bound to some selection operation.
source-start-select-word () [Action]
Start selecting a word.
source-update-glyphs () [Action]
Update all visible glyphs. Usually invoked after a scrolling operation.
A.2 Images
DDD installs a number of images that may be used as pixmap resources, simply by giving a
symbolic name. For button images, three variants are installed as well:
• The suffix -hi indicates a highlighted variant (Button is entered).
• The suffix -arm indicates an armed variant (Button is pushed).
• The suffix -xx indicates a disabled (insensitive) variant.
break_at [Image]
‘Break at ()’ button.
clear_at [Image]
‘Clear at ()’ button.
ddd [Image]
DDD icon.
delete [Image]
‘Delete ()’ button.
disable [Image]
‘Disable’ button.
dispref [Image]
‘Display * ()’ button.
148 Debugging with DDD
display [Image]
‘Display ()’ button.
drag_arrow [Image]
The execution pointer (being dragged).
drag_cond [Image]
A conditional breakpoint (being dragged).
drag_stop [Image]
A breakpoint (being dragged).
drag_temp [Image]
A temporary breakpoint (being dragged).
enable [Image]
‘Enable’ button.
find_forward [Image]
‘Find>> ()’ button.
find_backward [Image]
‘Find<< ()’ button.
grey_arrow [Image]
The execution pointer (not in lowest frame).
grey_cond [Image]
A conditional breakpoint (disabled).
grey_stop [Image]
A breakpoint (disabled).
grey_temp [Image]
A temporary breakpoint (disabled).
hide [Image]
‘Hide ()’ button.
lookup [Image]
‘Lookup ()’ button.
maketemp [Image]
‘Make Temporary’ button.
new_break [Image]
‘New Breakpoint’ button.
new_display [Image]
‘New Display’ button.
new_watch [Image]
‘New Watchpoint’ button.
plain_arrow [Image]
The execution pointer.
plain_cond [Image]
A conditional breakpoint (enabled).
149
plain_stop [Image]
A breakpoint (enabled).
plain_temp [Image]
A temporary breakpoint (enabled).
print [Image]
‘Print ()’ button.
properties [Image]
‘Properties’ button.
rotate [Image]
‘Rotate ()’ button.
set [Image]
‘Set ()’ button.
show [Image]
‘Show ()’ button.
signal_arrow [Image]
The execution pointer (stopped by signal).
undisplay [Image]
‘Undisplay ()’ button.
unwatch [Image]
‘Unwatch ()’ button.
watch [Image]
‘Watch ()’ button.
151
to get the configuration information. If this does not work, please include at least the DDD
version, the type of machine you are using, and its operating system name and version
number.
• The debugger you are using and its version (e.g., ‘gdb-4.17’ or ‘dbx as shipped with
Solaris 2.6’).
• The compiler you used to compile DDD and its version (e.g., ‘gcc-2.8.1’).
• A description of what behavior you observe that you believe is incorrect. For example,
“DDD gets a fatal signal” or “DDD exits immediately after attempting to create the data
window“.
• A log file showing the interaction between DDD and the inferior debugger. By default,
this interaction is logged in the file ~/.ddd/log. Include all trace output from the DDD
invocation up to the first bug occurrence; insert own comments where necessary.
• If you wish to suggest changes to the DDD source, send us context diffs. If you even discuss
something in the DDD source, refer to it by context, never by line number.
Be sure to include this information in every single bug report.
1
This section was contributed by Gary Cliff from Computing Devices Canada Ltd., [email protected].
156 Debugging with DDD
# Launch.tcl - Launch application Tcl user customization file.
#
######
#
# setupDDD - sets up DDD for use by the launcher
#
# This routine adds the DDD to the application bar
#
# SYNOPSIS:
# setupDDD
#
# PARAMETERS: N/A
#
# RETURNS: N/A
#
# ERRORS: N/A
#
proc setupDDD {} {
# Add to the default application bar
objectCreate app ddd DDD {launchDDD}
}
Appendix C: Configuration Notes 157
######
#
# launchDDD - launch the DDD debugger
#
# SYNOPSIS:
# launchDDD
#
# PARAMETERS: N/A
#
# RETURNS: N/A
#
# ERRORS: N/A
#
proc launchDDD {} {
global tgtsvr_selected
global tgtsvr_cpuid
In order for DDD to automatically display the source of a previously loaded file, the entry
point must be named either ‘vxworks_main’ or ‘main_vxworks’.
See Section C.1 [GDB], page 155, for further configuration notes.
As with any scripting or interpreted language like Perl, stepping a machine-language instruc-
tions (commands Stepi/Nexti) doesn’t exist.
Some BASH settings are essential for DDD to work correctly. These settings with their correct
values are:
set annotate 1
set prompt set prompt bashdb$_Dbg_less$_Dbg_greater$_Dbg_space
DDD sets these values automatically when invoking BASH; if these values are changed, there
may be some malfunctions.
Pay special attention when the prompt has extra angle brackets (a nested shell) or has any
parenthesis (is in a subshell). Quitting may merely exit out of one of these nested (sub)shells
rather than leave the program.
As with any scripting or interpreted language like Perl, stepping a machine-language instruc-
tions (commands Stepi/Nexti) doesn’t exist.
Pay special attention when the prompt has extra angle brackets—nested invocation of GNU
MAKE. Quitting may merely exit out of one of these nested invocations rather than leave the
program.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your
freedom to share and change the works. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change all versions of a program—to make
sure it remains free software for all its users. We, the Free Software Foundation, use the GNU
General Public License for most of our software; it applies also to any other work released this
way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public
Licenses are designed to make sure that you have the freedom to distribute copies of free software
(and charge for them if you wish), that you receive source code or can get it if you want it, that
you can change the software or use pieces of it in new free programs, and that you know you
can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking
you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies
of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must
pass on to the recipients the same freedoms that you received. You must make sure that they,
too, receive or can get the source code. And you must show them these terms so they know
their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright
on the software, and (2) offer you this License giving you legal permission to copy, distribute
and/or modify it.
For the developers’ and authors’ protection, the GPL clearly explains that there is no war-
ranty for this free software. For both users’ and authors’ sake, the GPL requires that modified
versions be marked as changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the
software inside them, although the manufacturer can do so. This is fundamentally incompatible
with the aim of protecting users’ freedom to change the software. The systematic pattern of
such abuse occurs in the area of products for individuals to use, which is precisely where it is
most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice
for those products. If such problems arise substantially in other domains, we stand ready to
extend this provision to those domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow
patents to restrict development and use of software on general-purpose computers, but in those
that do, we wish to avoid the special danger that patents applied to a free program could make it
effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render
the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
168 Debugging with DDD
The Corresponding Source need not include anything that users can regenerate automati-
cally from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program,
and are irrevocable provided the stated conditions are met. This License explicitly affirms
your unlimited permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its content, constitutes
a covered work. This License acknowledges your rights of fair use or other equivalent, as
provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions
so long as your license otherwise remains in force. You may convey covered works to others
for the sole purpose of having them make modifications exclusively for you, or provide
you with facilities for running those works, provided that you comply with the terms of
this License in conveying all material for which you do not control copyright. Those thus
making or running the covered works for you must do so exclusively on your behalf, under
your direction and control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated
below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any
applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on
20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of
technological measures to the extent such circumvention is effected by exercising rights
under this License with respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against the work’s users,
your or third parties’ legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program’s source code as you receive it, in any
medium, provided that you conspicuously and appropriately publish on each copy an ap-
propriate copyright notice; keep intact all notices stating that this License and any non-
permissive terms added in accord with section 7 apply to the code; keep intact all notices
of the absence of any warranty; and give all recipients a copy of this License along with the
Program.
You may charge any price or no price for each copy that you convey, and you may offer
support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the
Program, in the form of source code under the terms of section 4, provided that you also
meet all of these conditions:
a. The work must carry prominent notices stating that you modified it, and giving a
relevant date.
b. The work must carry prominent notices stating that it is released under this License
and any conditions added under section 7. This requirement modifies the requirement
in section 4 to “keep intact all notices”.
c. You must license the entire work, as a whole, under this License to anyone who comes
into possession of a copy. This License will therefore apply, along with any applicable
170 Debugging with DDD
section 7 additional terms, to the whole of the work, and all its parts, regardless of how
they are packaged. This License gives no permission to license the work in any other
way, but it does not invalidate such permission if you have separately received it.
d. If the work has interactive user interfaces, each must display Appropriate Legal Notices;
however, if the Program has interactive interfaces that do not display Appropriate Legal
Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not
by their nature extensions of the covered work, and which are not combined with it such as
to form a larger program, in or on a volume of a storage or distribution medium, is called an
“aggregate” if the compilation and its resulting copyright are not used to limit the access or
legal rights of the compilation’s users beyond what the individual works permit. Inclusion
of a covered work in an aggregate does not cause this License to apply to the other parts
of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5,
provided that you also convey the machine-readable Corresponding Source under the terms
of this License, in one of these ways:
a. Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by the Corresponding Source fixed on a durable
physical medium customarily used for software interchange.
b. Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by a written offer, valid for at least three years and
valid for as long as you offer spare parts or customer support for that product model,
to give anyone who possesses the object code either (1) a copy of the Corresponding
Source for all the software in the product that is covered by this License, on a durable
physical medium customarily used for software interchange, for a price no more than
your reasonable cost of physically performing this conveying of source, or (2) access to
copy the Corresponding Source from a network server at no charge.
c. Convey individual copies of the object code with a copy of the written offer to provide
the Corresponding Source. This alternative is allowed only occasionally and noncom-
mercially, and only if you received the object code with such an offer, in accord with
subsection 6b.
d. Convey the object code by offering access from a designated place (gratis or for a
charge), and offer equivalent access to the Corresponding Source in the same way
through the same place at no further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to copy the object code
is a network server, the Corresponding Source may be on a different server (operated by
you or a third party) that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you remain obligated to
ensure that it is available for as long as needed to satisfy these requirements.
e. Convey the object code using peer-to-peer transmission, provided you inform other
peers where the object code and Corresponding Source of the work are being offered
to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corre-
sponding Source as a System Library, need not be included in conveying the object code
work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal
property which is normally used for personal, family, or household purposes, or (2) anything
Appendix G: GNU General Public License 171
All other non-permissive additional terms are considered “further restrictions” within the
meaning of section 10. If the Program as you received it, or any part of it, contains a notice
stating that it is governed by this License along with a term that is a further restriction,
you may remove that term. If a license document contains a further restriction but permits
relicensing or conveying under this License, you may add to a covered work material gov-
erned by the terms of that license document, provided that the further restriction does not
survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the
relevant source files, a statement of the additional terms that apply to those files, or a
notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately
written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this
License. Any attempt otherwise to propagate or modify it is void, and will automatically
terminate your rights under this License (including any patent licenses granted under the
third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copy-
right holder is reinstated (a) provisionally, unless and until the copyright holder explicitly
and finally terminates your license, and (b) permanently, if the copyright holder fails to
notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the
copyright holder notifies you of the violation by some reasonable means, this is the first
time you have received notice of violation of this License (for any work) from that copyright
holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have been
terminated and not permanently reinstated, you do not qualify to receive new licenses for
the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program.
Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-
peer transmission to receive a copy likewise does not require acceptance. However, nothing
other than this License grants you permission to propagate or modify any covered work.
These actions infringe copyright if you do not accept this License. Therefore, by modifying
or propagating a covered work, you indicate your acceptance of this License to do so.
Appendix G: GNU General Public License 173
A patent license is “discriminatory” if it does not include within the scope of its coverage,
prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights
that are specifically granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the business of distributing
software, under which you make payment to the third party based on the extent of your
activity of conveying the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory patent license (a)
in connection with copies of the covered work conveyed by you (or copies made from those
copies), or (b) primarily for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement, or that patent license
was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or
other defenses to infringement that may otherwise be available to you under applicable
patent law.
12. No Surrender of Others’ Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that
contradict the conditions of this License, they do not excuse you from the conditions of this
License. If you cannot convey a covered work so as to satisfy simultaneously your obligations
under this License and any other pertinent obligations, then as a consequence you may not
convey it at all. For example, if you agree to terms that obligate you to collect a royalty
for further conveying from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely from conveying the
Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine
any covered work with a work licensed under version 3 of the GNU Affero General Public
License into a single combined work, and to convey the resulting work. The terms of
this License will continue to apply to the part which is the covered work, but the special
requirements of the GNU Affero General Public License, section 13, concerning interaction
through a network will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General
Public License from time to time. Such new versions will be similar in spirit to the present
version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a
certain numbered version of the GNU General Public License “or any later version” applies
to it, you have the option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software Foundation. If the Program
does not specify a version number of the GNU General Public License, you may choose any
version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU Gen-
eral Public License can be used, that proxy’s public statement of acceptance of a version
permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no addi-
tional obligations are imposed on any author or copyright holder as a result of your choosing
to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMIT-
TED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRIT-
Appendix G: GNU General Public License 175
ING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PRO-
GRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MOD-
IFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE
TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local
legal effect according to their terms, reviewing courts shall apply local law that most closely
approximates an absolute waiver of all civil liability in connection with the Program, unless
a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it
starts in an interactive mode:
program Copyright (C) year name of author
176 Debugging with DDD
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.
The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the
General Public License. Of course, your program’s commands might be different; for a GUI
interface, you would use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a
“copyright disclaimer” for the program, if necessary. For more information on this, and how to
apply and follow the GNU GPL, see http://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating your program into propri-
etary programs. If your program is a subroutine library, you may consider it more useful to
permit linking proprietary applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first, please read http://www.
gnu.org/philosophy/why-not-lgpl.html.
177
covers must also clearly and legibly identify you as the publisher of these copies. The front
cover must present the full title with all words of the title equally prominent and visible.
You may add other material on the covers in addition. Copying with changes limited to
the covers, as long as they preserve the title of the Document and satisfy these conditions,
can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the
first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto
adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you
must either include a machine-readable Transparent copy along with each Opaque copy,
or state in or with each Opaque copy a computer-network location from which the general
network-using public has access to download using public-standard network protocols a
complete Transparent copy of the Document, free of added material. If you use the latter
option, you must take reasonably prudent steps, when you begin distribution of Opaque
copies in quantity, to ensure that this Transparent copy will remain thus accessible at the
stated location until at least one year after the last time you distribute an Opaque copy
(directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before
redistributing any large number of copies, to give them a chance to provide you with an
updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions
of sections 2 and 3 above, provided that you release the Modified Version under precisely
this License, with the Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever possesses a copy of it. In
addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any, be
listed in the History section of the Document). You may use the same title as a previous
version if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least five of
the principal authors of the Document (all of its principal authors, if it has fewer than
five), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modified Version, as the
publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications adjacent to the other copy-
right notices.
F. Include, immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in the form
shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Document’s license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating
at least the title, year, new authors, and publisher of the Modified Version as given
on the Title Page. If there is no section Entitled “History” in the Document, create
one stating the title, year, authors, and publisher of the Document as given on its
182 Debugging with DDD
Title Page, then add an item describing the Modified Version as stated in the previous
sentence.
J. Preserve the network location, if any, given in the Document for public access to a
Transparent copy of the Document, and likewise the network locations given in the
Document for previous versions it was based on. These may be placed in the “History”
section. You may omit a network location for a work that was published at least four
years before the Document itself, or if the original publisher of the version it refers to
gives permission.
K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title
of the section, and preserve in the section all the substance and tone of each of the
contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their
titles. Section numbers or the equivalent are not considered part of the section titles.
M. Delete any section Entitled “Endorsements”. Such a section may not be included in
the Modified Version.
N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title
with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as
Secondary Sections and contain no material copied from the Document, you may at your
option designate some or all of these sections as invariant. To do this, add their titles to
the list of Invariant Sections in the Modified Version’s license notice. These titles must be
distinct from any other section titles.
You may add a section Entitled “Endorsements”, provided it contains nothing but endorse-
ments of your Modified Version by various parties—for example, statements of peer review
or that the text has been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added
by (or through arrangements made by) any one entity. If the Document already includes
a cover text for the same cover, previously added by you or by arrangement made by the
same entity you are acting on behalf of, you may not add another; but you may replace the
old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to
use their names for publicity for or to assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under
the terms defined in section 4 above for modified versions, provided that you include in the
combination all of the Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its license notice, and that you
preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment to
the section titles in the list of Invariant Sections in the license notice of the combined work.
Appendix I: GNU Free Documentation License 183
In the combination, you must combine any sections Entitled “History” in the various original
documents, forming one section Entitled “History”; likewise combine any sections Entitled
“Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections
Entitled “Endorsements.”
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under
this License, and replace the individual copies of this License in the various documents with
a single copy that is included in the collection, provided that you follow the rules of this
License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually
under this License, provided you insert a copy of this License into the extracted document,
and follow this License in all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, is called an
“aggregate” if the copyright resulting from the compilation is not used to limit the legal
rights of the compilation’s users beyond what the individual works permit. When the
Document is included in an aggregate, this License does not apply to the other works in
the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document,
then if the Document is less than one half of the entire aggregate, the Document’s Cover
Texts may be placed on covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form. Otherwise they must
appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the
Document under the terms of section 4. Replacing Invariant Sections with translations
requires special permission from their copyright holders, but you may include translations
of some or all Invariant Sections in addition to the original versions of these Invariant
Sections. You may include a translation of this License, and all the license notices in
the Document, and any Warranty Disclaimers, provided that you also include the original
English version of this License and the original versions of those notices and disclaimers. In
case of a disagreement between the translation and the original version of this License or a
notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”,
the requirement (section 4) to Preserve its Title (section 1) will typically require changing
the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly pro-
vided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute
it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copy-
right holder is reinstated (a) provisionally, unless and until the copyright holder explicitly
and finally terminates your license, and (b) permanently, if the copyright holder fails to
notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the
copyright holder notifies you of the violation by some reasonable means, this is the first
time you have received notice of violation of this License (for any work) from that copyright
holder, and you cure the violation prior to 30 days after your receipt of the notice.
184 Debugging with DDD
Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have been
terminated and not permanently reinstated, receipt of a copy of some or all of the same
material does not give you any rights to use it.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free Doc-
umentation License from time to time. Such new versions will be similar in spirit to the
present version, but may differ in detail to address new problems or concerns. See https://
www.gnu.org/licenses/.
Each version of the License is given a distinguishing version number. If the Document
specifies that a particular numbered version of this License “or any later version” applies
to it, you have the option of following the terms and conditions either of that specified
version or of any later version that has been published (not as a draft) by the Free Software
Foundation. If the Document does not specify a version number of this License, you may
choose any version ever published (not as a draft) by the Free Software Foundation. If the
Document specifies that a proxy can decide which future versions of this License can be
used, that proxy’s public statement of acceptance of a version permanently authorizes you
to choose that version for the Document.
11. RELICENSING
“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web
server that publishes copyrightable works and also provides prominent facilities for anybody
to edit those works. A public wiki that anybody can edit is an example of such a server. A
“Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of
copyrightable works thus published on the MMC site.
“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published
by Creative Commons Corporation, a not-for-profit corporation with a principal place of
business in San Francisco, California, as well as future copyleft versions of that license
published by that same organization.
“Incorporate” means to publish or republish a Document, in whole or in part, as part of
another Document.
An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that
were first published under this License somewhere other than this MMC, and subsequently
incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections,
and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-
SA on the same site at any time before August 1, 2009, provided the MMC is eligible for
relicensing.
Appendix I: GNU Free Documentation License 185
Label Index
G O
GDB Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 On item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
GDB Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55 Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67, 68
GDB Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Open Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 67
Get Core File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Open Core Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
GNU Make Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Open Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 67, 86
Green background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Open Recent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 68
Open Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30, 40
Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 68
H Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Other . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 47, 55 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Hide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 98, 99
I P
Iconify all windows at once . . . . . . . . . . . . . . . . . . . . 65 Paper Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119, 122
Ignore Count. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Pass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Include Core Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41, 106
Intel x86 flab gits and registers . . . . . . . . . . . . . 113 Perl Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 52, 81 Perl Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55
Perl Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102, 103
J Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 120, 123
Plot Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
JDB Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Portrait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
JDB Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55
Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
JDB Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Previous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 81, 93, 96
Print () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
K Print Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 53, 94 Print Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41, 119
Print Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 42
L PYDB Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Ladebug Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 PYDB Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55
Ladebug Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55 PYDB Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Ladebug Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Landscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Layout Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46, 117 Q
Left to right . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
List Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Quit Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 69, 78
Lookup () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
189
R Suppress X warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79, 140
Red Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113, 114
Redo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41, 53, 55, 70, 91
T
Refer to Program Sources. . . . . . . . . . . . . . . . . . . . . . . . 73 Tab Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Refresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Temp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Refresh Displays . . . . . . . . . . . . . . . . . . . . . . . . . . 102, 107 Theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 128 Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Reload Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 131 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 92
Remove Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Threshold for repeated print elements . . . . . . . . 107
Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Tic Tac Toe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Tiny Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Tip of the Day . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Rotate Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46, 118 Tool Bar Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42, 52, 83 Tool Buttons Location . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Run Again . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 83 Top to bottom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Run in Execution Window . . . . . . . . . . . . . . . . . . . . . 43, 85
U
S Uncluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Save Data As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Uncompress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Save Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42, 94 Undisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 105
Save Session As . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 41, 94 Undisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Undo . . . . . . . . . . . . . . . . . . . . . . 41, 53, 55, 70, 91, 99, 105
Scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Undo Buffer Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Search path for source files . . . . . . . . . . . . . . . . . . . 70
Uniconify When Ready . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Select All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 53, 88
Selected Only. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119, 122
Unwatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Send . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 53, 90
Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 107
Set Execution Position . . . . . . . . . . . . . . . . . . . . . . . . . 88
Set Temporary Breakpoint . . . . . . . . . . . . . . . . . . . . . . . 77 V
Set Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 98 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39, 42, 120
Show All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Show Just . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Show More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
W
Show Position and Breakpoints . . . . . . . . . . . . . . . . . . 71 Warn if Multiple DDD Instances are Running . . . . 28
Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 93 Watch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49, 81
Small Titles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Watchpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Small Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Web Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 45 What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55
Source indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 When DDD Crashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Source Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Window Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40, 44 Writing into executable and core files . . . . . . . 132
Status Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46, 101
Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 52, 87
Step Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 127 X
Stepi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52, 127 XDB Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 XDB Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47, 55
Suppress Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 105, 113 XDB Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
191
Key Index
A E
Alt+1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Esc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43, 44
Alt+2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ESC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28, 48, 81, 135
Alt+3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Alt+4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42, 45
Alt+8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 F
Alt+9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 F1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Alt+A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Alt+G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Alt+I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 F3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 F5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 F8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Alt+Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 F9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
C H
Ctrl+, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Home . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Ctrl+- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Ctrl+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Ctrl+/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 L
Ctrl+= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Left . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98, 117
Ctrl+\ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 43
Ctrl+A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Ctrl+B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 135 R
Ctrl+C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 41, 43, 48, 81
Ctrl+D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 134
Ctrl+Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 91 Right . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98, 117
Ctrl+F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 135
Ctrl+F1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Ctrl+Ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 S
Ctrl+L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Ctrl+M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Shift+Ctrl+L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Ctrl+N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Shift+Ctrl+U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Ctrl+O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Shift+Ctrl+V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Ctrl+Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17, 28, 41 Shift+Del . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Ctrl+S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Shift+F5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Ctrl+Shift+A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42, 48 Shift+F6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Ctrl+U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42, 44 Shift+F9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Ctrl+Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 91 Shift+Ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Ctrl+V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Ctrl+W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Ctrl+X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 T
Ctrl+Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Ctrl+Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 TAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
D U
Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 98, 117, 134 Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44, 98, 117, 134
193
Command Index
C M
cont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82, 91 mwm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
contuntil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
P
D print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Q
quit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28, 82
F
file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 R
remsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
replot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
G rsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
gcore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
gd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
graph apply theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
graph disable display . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 S
graph display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97, 101 set environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
graph enable display . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 set output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
graph plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 set term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
graph refresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
graph toggle theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
graph unapply theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
T
gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 target remote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 thbreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
tty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
H U
hbreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
unset environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
K Z
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 zcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
195
Resource Index
A DDD_STATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
activeButtonColorKey . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 dddinitVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
align2dArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 debugCoreDumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
appDefaultsVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
arrayOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 debuggerCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
autoCloseDataWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 decorateTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
autoDebugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 defaultFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
autoRaiseMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 defaultFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
autoRaiseMenuDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
autoRaiseTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 deleteAliasDisplays . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
detectAliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
B disassemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34, 36
displayGlyphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
bashDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . 112
displayLineNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
bashInitCommands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
displayPlacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
blockTTYInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
displayTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
break_at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
bufferGDBOutput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 DISPLAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24, 32
bumpDisplays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 dispref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
buttonCaptionGeometry . . . . . . . . . . . . . . . . . . . . . . . . . . 51 drag_arrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
buttonCaptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 drag_cond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
buttonColorKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 drag_stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
buttonDocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 drag_temp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
buttonImageGeometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 dumpCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
buttonImages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
buttonTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
E
editCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
C EDITOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
cacheGlyphImages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
cacheMachineCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 expandRepeatedValues . . . . . . . . . . . . . . . . . . . . . . . . . . 107
cacheSourceFiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
checkConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
checkGrabDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 F
checkGrabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 filterFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
checkOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 find_backward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
CLASSPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 find_forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
clear_at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 findCaseSensitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
clusterDisplays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 findWordsOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
commandToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 fixedWidthFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
commonToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 fixedWidthFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
consoleButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 flatDialogButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
consoleHasFocus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 flatToolbarButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
contInterruptDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 fontSelectCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
cutCopyPasteBindings . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
G
D gdbDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
dataButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 gdbInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
dataFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 gdbSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
dataFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 getCoreCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
dbxDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 globalTabCompletion . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
dbxInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 glyphUpdateDelay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
dbxSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 grabAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
ddd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 grabActionDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
DDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 grey_arrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
DDD_NO_SIGNAL_HANDLERS. . . . . . . . . . . . . . . . . . . . . . . . 153 grey_cond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
DDD_SESSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 grey_stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
DDD_SESSIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 grey_temp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
196 Debugging with DDD
groupIconify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 P
PAGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84, 154
pannedGraphEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
H paperSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
perlDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . 112
hide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 perlInitCommands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
hideInactiveDisplays . . . . . . . . . . . . . . . . . . . . . . . . . . 116 perlSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
plain_arrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
plain_cond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
I plain_stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
plain_temp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
indentCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
plot2dSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
indentScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
plot3dSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
indentSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
plotCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
initSymbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 plotInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
plotTermType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
plotWindowClass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
J plotWindowDelay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
popdownHistorySize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
jdbDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
positionTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
jdbInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
jdbSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
printCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
psCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
L pydbDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . 112
pydbInitCommands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
labelDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
pydbSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
lineBufferedConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
lineNumberWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
linesAboveCursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
linesBelowCursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Q
listCoreCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 questionTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
listDirCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
listExecCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
listSourceCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
R
lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
rshCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
runInterruptDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
M
maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 S
makeInitCommands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 saveHistoryOnExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
maketemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 saveOptionsOnExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
maxDisassemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 selectAllBindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
maxGlyphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 separateDataWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
maxUndoDepth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 separateExecWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
maxUndoSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 separateSourceWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
SHELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
N show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
showBaseDisplayTitles . . . . . . . . . . . . . . . . . . . . . . . . . 116
new_break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 showConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
new_display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 showDependentDisplayTitles . . . . . . . . . . . . . . . . . . . 116
new_watch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 showFonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
showInvocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
showLicense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
O showManual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
showMemberNames. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
openDataWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 showNews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
openDebuggerConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 showVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
openSelection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 signal_arrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
openSourceWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 sortPopdownHistory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
sourceButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
sourceEditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
sourceInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
197
splashScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 U
splashScreenColorKey . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 uncompressCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
startupTipCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 undisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
startupTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 uniconifyWhenReady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
statusAtBottom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 unwatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
stickyTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 useSourcePath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
useTTYCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
stopAndContinue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
structOrientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
suppressTheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 V
suppressWarnings . . . . . . . . . . . . . . . . . . . . . . . . . . . 28, 154 valueDocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
synchronousDebugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 valueTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
variableWidthFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
variableWidthFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . 63
verifyButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
vslBaseDefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
vslDefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
T vslLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
vslPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
tabWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
TERMCAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
termCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 W
terminateOnEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 warnIfLocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
termType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 watch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
TERM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84, 86 WWWBROWSER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 wwwCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
tipn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 wwwPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
toolbarsAtBottom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
toolButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 X
toolRightOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 xdbDisplayShortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
toolTopOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 xdbInitCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 xdbSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
typedAliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 XEDITOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
199
File Index
. M
.emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
.gdbinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25, 34, 153 mdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
more . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
~
~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23, 56 N
netscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
C
ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 O
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
D
dbx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 P
Ddd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56, 65, 143
ddd-3.4.0-html-manual.tar.gz . . . . . . . . . . . . . . . . . . . 4 perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
ddd-3.4.0-pics.tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
ddd-3.4.0.tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 pydb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
ddd-version.tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
R
E remsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 131, 136 rsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
emacsclient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
emacsserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
S
sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
F sample.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 16
fig2dev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
firefox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 stty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
suppress.vsl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
G
gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 T
gdbserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 TODO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
gnuclient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 transfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
gnudoit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
gnuserv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 V
vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
I
init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 W
wdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
J
java.prof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 X
jdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 xdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
xemacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58, 131, 136
xfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
L xfontsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
ladebug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 xmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 xsm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 23, 122, 152 xterm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
lynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 xxgdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
201
Concept Index
A C
Aborting execution . . . . . . . . . . . . . . . . . . . . . . . . . . . 29, 43 C ................................................. 3
Ada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Aliases, detecting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Call stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Animating plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Class, opening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Arguments, displaying . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Clipboard, putting displays . . . . . . . . . . . . . . . . . . . . . . 106
Arguments, of the debugged program . . . . . . . . . . . . . 83
Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Arguments, program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Cluster, and plotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Array slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Clustered display, creating . . . . . . . . . . . . . . . . . . . . . . . . 97
Array, artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Command completion . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Array, plotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Command history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Artificial arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Command tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Assertions and breakpoints . . . . . . . . . . . . . . . . . . . . . . . 78 Command, argument . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Assertions and watchpoints . . . . . . . . . . . . . . . . . . . . . . . 81 Command, auto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Command, breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Assistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Command, defining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Auto-command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Command, defining in
Automatic Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 @acronymGDB@comment . . . . . . . . . . . . . . . . . . . . 140
Command, defining with other debuggers . . . . . . . . 141
Command, recording . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Command, repeating . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
B Command, searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Command, user-defined. . . . . . . . . . . . . . . . . . . . . . . . . . 139
Balloon help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Command-line debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Compact Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Bash, invoking Completion of commands . . . . . . . . . . . . . . . . . . . . . . . . 133
@acronym@valueDDD@comment with . . . . . . . . . 17 Completion of quoted strings . . . . . . . . . . . . . . . . . . . . 134
Box library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Conditions on breakpoints . . . . . . . . . . . . . . . . . . . . . . . . 78
Breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Context-sensitive help . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Breakpoint commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Continue, at different address . . . . . . . . . . . . . . . . . . . . . 88
Breakpoint commands, vs. conditions . . . . . . . . . . . . . 78 Continue, one line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Breakpoint conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Continue, to location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Breakpoint ignore counts . . . . . . . . . . . . . . . . . . . . . . . . . 78 Continue, to next line . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Breakpoint properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Continue, until function returns. . . . . . . . . . . . . . . . . . . 88
Continue, until greater line is reached . . . . . . . . . . . . . 88
Breakpoint, copying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Continuing execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Breakpoint, deleting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Continuing process execution . . . . . . . . . . . . . . . . . . . . . 86
Breakpoint, disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Contour lines, in plots . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Breakpoint, dragging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Breakpoint, editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Copying displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Breakpoint, enabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Core dump, opening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Breakpoint, hardware-assisted . . . . . . . . . . . . . . . . . . . . 80 Core file, in sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Breakpoint, looking up . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Cutting displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Breakpoint, moving. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Breakpoint, setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Breakpoint, temporary . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 D
Breakpoint, toggling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Data Theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Breakpoints, editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Data Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Button editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Data window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Button tip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 DBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Button tip, turning off . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 DBX, invoking
Buttons, defining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 @acronym@valueDDD@comment with . . . . . . . . . 18
Debugger console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Debugger, on remote host . . . . . . . . . . . . . . . . . . . . . . . . 32
Debugging @acronym@valueDDD@comment . . . . 153
Debugging flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Debugging optimized code . . . . . . . . . . . . . . . . . . . . . . . . 67
Default session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Deferred display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
202 Debugging with DDD
I N
IBMGL file, printing as . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Name, display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Icon, invoking News, showing on standard output . . . . . . . . . . . . . . . . 21
@acronym@valueDDD@comment as . . . . . . . . . . . 25 NORA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Ignore count. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Indent, source code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Inferior debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Info manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O
Initial frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Innermost frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Optimized code, debugging . . . . . . . . . . . . . . . . . . . . . . . 67
Input of the debugged program . . . . . . . . . . . . . . . . . . . 84 Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Instruction, stepping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Outermost frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Integrating @acronym@valueDDD@comment . . . . 136 Output of the debugged program . . . . . . . . . . . . . . . . . 84
Interrupting @acronym@valueDDD@comment . . . . 29
Interrupting execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Interrupting execution, automatically . . . . . . . . . . . . . 38
Invoking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
P
Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Pasting displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
J Patching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
PDF manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
JDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Perl, invoking
JDB, invoking
@acronym@valueDDD@comment with . . . . . . . . . 17
@acronym@valueDDD@comment with . . . . . . . . . 17
Jump to different address . . . . . . . . . . . . . . . . . . . . . . . . . 88 PIC file, printing as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Plot appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
K Plot, animating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Killing @acronym@valueDDD@comment . . . . . . . . . 29 Plot, exporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Killing the debugged program . . . . . . . . . . . . . . . . . . . . 94 Plot, printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Plot, scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Plotting style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
L Plotting values . . . . . . . . . . . . . . . . . . . . . . . . . . . 50, 95, 120
Lütkehaus, Dorothea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Pointers, dereferencing . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Ladebug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Position, of display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Ladebug, invoking PostScript, printing as . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
@acronym@valueDDD@comment with . . . . . . . . . 18 Print, output formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5, 167 Printing plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
License, Documentation . . . . . . . . . . . . . . . . . . . . . . . . . 179 Printing the Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
License, showing on standard output . . . . . . . . . . . . . . 20 Printing values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95, 96
Line numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Printing values with ‘Print’ . . . . . . . . . . . . . . . . . . . . . . 49
Local variables, displaying . . . . . . . . . . . . . . . . . . . . . . . 100 Process, attaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Program arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Logging, disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Program counter, displaying . . . . . . . . . . . . . . . . . . . . . 128
Looking up breakpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Program output, confusing . . . . . . . . . . . . . . . . . . . . . . . 84
Looking up items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Program, on remote host . . . . . . . . . . . . . . . . . . . . . . . . . 33
Lookups, redoing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Program, opening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Lookups, undoing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Program, patching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
PSG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
pydb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
M PYDB, invoking
Machine code window . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 @acronym@valueDDD@comment with . . . . . . . . . 17
Machine code, examining . . . . . . . . . . . . . . . . . . . . . . . . 127 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Machine code, executing . . . . . . . . . . . . . . . . . . . . . . . . . 127
Mailing list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Make, invoking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Q
Manual, showing on standard output . . . . . . . . . . . . . 21
Memory, dumping contents . . . . . . . . . . . . . . . . . . . . . . . 95 Quitting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Memory, examining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Quotes in commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Modula-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Mouse pointer, frozen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
204 Debugging with DDD