Next: Getting Started and Up: The Concert Debugger Users Previous: The Concert Debugger Users

Introduction

Concurrent programming introduces whole new classes of programming errors in addition to the many already inherent in all programming: among these are synchronization errors and deadlocks. To facilitate finding both the new kinds of bugs and the old ones, the Concert debugger allows one to observe the state of a Concert program at various stages of its execution.

The Concert Debugger is built atop The GNU Debugger and Emacs. The interface is through an Emacs-Cadb mode, with a set of ``concert'' commands to make debugging CA programs easier.

Capabilities

The Concert Debugger provides a complement of debugging capabilities, generalized to function for concurrent programs; additionally, some new functionality designed specifically for concurrent programs has been added. The following list summarized the functionality provided by The Concert Debugger .

breakpoints
work much like breakpoints in The GNU Debugger . When a breakpoint is hit, the entire parallel program is stopped, and the state is available for examination. Thus, breakpoints are generalized for concurrent programs by stopping the entire program, rather than just the node that triggers the break.
tracing
facilities are included, but they are substantially generalized to be more useful in a concurrent environment. Both message sends and method execution can be traced, because there events can be distinct in parallel programs.
expression evaluation
is analogous to the interpreter provided by the The GNU Debugger command line. Concert expressions can be given to The Concert Debugger just as C expressions can be typed into The GNU Debugger normally.
a view of concurrent execution
is synthesized by the debugger by generalizing the notion of a call-stack. A call tree is provided, where concurrency is expressed as multiple children of a single caller. Conventional stack walking functionality is provided for examining this tree.
coherent printing
is an experimental feature; it provides an interface for specifying print statements that will not be reordered by arbitrary network and scheduling systems. Furthermore, they do not require modifying the source code.
abstraction-based debugging
is a trace facility that traces requests to program abstractions. Facilities are provided for specifying abstractions in terms of their interfaces, and for tracing the requests and responses to them.



Next: Getting Started and Up: The Concert Debugger Users Previous: The Concert Debugger Users


Julian Dolby
Concurrent Systems Architecture Group