|
|
The MULTIR Source-Level Debugger |
|
The MULTIR Source-level Debugger is a powerful windowing debugger that enables program loading, execution, run control, and monitoring. MULTI provides debugging in C, C++, Embedded C++, Ada 95, Fortran, and assembly. MULTI's basic functions are intuitive and easy to use; programmers spend less time learning the tools and more time generating code. MULTI contains advanced features for viewing data during execution, easy direct links to the MULTI Project Builder, Text Editor, Class Browser, Run-time Error Checking, and Performance Profiler, customizable menus and command buttons, and an open interface to editors and version control software of choice.
|
|
|
|
|
|
The Main Debugger Window |
|
The main debugger window consists of three panes, as shown to the right. The upper pane is the index pane, which contains navigational buttons. Below that is the source pane, which displays the program source. The bottom pane is the command pane, which is used to enter typed commands and display the results of commands.
|
|
|
|
Full-Featured Debugging |
|
MULTI provides an exhaustive set of debugging features, designed to make it easy to find and fix bugs:
|
|
Setting Breakpoints - A single-click on the green "break-dot" next to each executable line of source or assembly code sets a breakpoint. A stop sign will replace the dot to show that a breakpoint is set. Another click on the stop sign clears the breakpoint.
Conditional and Command breakpoints - Type language syntax onto the command pane or use the dialog box GUI to specify conditions and action clauses for breakpoints.
Single-Stepping - Stepping "into" (Step button) traces execution of every individual instruction even when functions are called. Stepping "over" (Next button) does not trace into the called function. Stepping "out of" (Return button) brings execution back to the calling function.
Examining Variables - Clicking on the name of a variable in the source pane causes the value of the variable to be displayed in the command pane. Pointers are recognized as a special case and the value of the object pointed to is also displayed. Clicking on the name of a structure causes the whole structure to be displayed, with every structure or class element labeled.
Data Explorer Windows - Double clicking on a variable name creates a window that dis-plays the variable, its type, and current value. The variable may be of any type, whether an integer, structure, array or class. The window display is updated to show value changes every time the program stops. If the display window contains a pointer, double clicking on the pointer will open a new data explorer window and display the variable pointed to. This feature makes it easy to follow a linked list or other complex data structures. Data explorer windows can be "frozen" to save a view of values at a given point in order to compare them with values at subsequent points in the program's execution.
Local Variables Display - A single click on the Locals button shows the variables local to the current function. When moving from function to function, the contents of the window will change to display the local variables of the current function being viewed.
Display Stack Trace - Clicking on the Call Stack button brings up a window displaying a stack trace. This allows the programmer to follow the progress of a program through its hierarchical call structure. The Stack Trace displays the name of each procedure, and the name and value of each argument.
Browse to Source Code for Functions - A double click on a function name automatically brings up the editor on the source code for that procedure.
Incremental Debug - Divides application debug symbol information generated by the compiler into separate files relevant to the code that is currently being debugged. This increases responsiveness while debugging very large projects. In addition, it allows an open API to access the advanced debug and variable lifetime information, debugging support of optimized code, and seamless debugging of applications across different host platforms.
|
|
|
|
Extensive C++ Support |
|
MULTI is a true C++ development environment with C++ support seamlessly integrated at every level. MULTI's Source-level Debugger evaluates C++ expressions and understands C++ namespace resolution, overloaded function resolution, and copy constructors and coercion operators. Casts and coercions are performed implicitly, and ambiguities regarding overloaded operators and functions are automatically resolved. MULTI is fully aware of the complex features of the C++ language. This makes it unnecessary to mentally translate C++ constructs into the mechanisms used by the compiler. Taking full advantage of MULTI's new advanced Incremental Debug format and improved processing of C++ symbol information, MULTI has implemented several advanced C++ debugging capabilities, including:
Full namespace debugging support
C++ function navigation with ambiguity resolution
Advanced class browsing
Debugging of C++ exception throws and long jumps
|
|
|
|
Displaying C++ Objects |
|
The same powerful display capabilities available for viewing variables in a C program have been extended to fully support the display of C++ objects. Clicking on the name of a C++ object displays its members in the command pane; double clicking on the name of the C++ object displays its members in a special display window where they can be modified or monitored as the user steps through the program. C++ programmers can access the following important information through MULTI's graphical user interface:
C++ inheritance graphs
C++ classes, casts and coercions
Static fields in classes
Anonymous unions in classes
Implicit this and casts
Overload ambiguity resolution
Calling overloaded operators and functions
References
True object types
|
|
|
|
Template Functions |
|
MULTI supports the debugging of template functions. With templates, C++ automatically generates multiple instances of a function, one for each combination of argument types actually used in the program. Every time the function is referenced, the C++ compiler determines which specific function to use, based on the argument types.
|
|
|
|
Memory Viewer |
|
MULTI enables the user to view the contents of memory in a flexible and powerful manner. MULTI's memview, which can be invoked through a user-defined button or command line statement, provides a full address/contents table of memory that can be formatted in a variety of ways including hexadecimal, decimal, ASCII, binary, real, and many more. Memory regions can be specified symbolically or in terms of absolute or relative addresses. Multiple memview windows can be opened to view several memory regions simultaneously.
|
|
|
|
nvoking an Editor |
|
The MULTI Source-level Debugger is aware of and interacts with other components of the MULTI environment. Clicking on the Edit button launches an editor on the current file, with the edit cursor positioned at the current line. Double clicking on the name of a procedure anywhere in the source pane brings up an editor window on the source code for that procedure definition. After making an edit, a single button click will recompile the program and reinitialize the debugger with the new executable.
|
|
|
|
Mixed Language Debugging |
|
MULTI supports mixed language debugging in C, C++, Embedded C++, Ada 95, FORTRAN and Assembly. When moving among modules of different languages, MULTI recognizes the language of the currently viewed file and adjusts its expression evaluation and data display accordingly. Also, command line input uses the syntax of the language being debugged. Ada and FORTRAN programmers can enjoy a debugger that understands their language instead of having to struggle through the use of a debugger intended for C programs. For example, arrays may be displayed in either row major order or column major order, according to the conventions of the language.
|
|
|
|
|
|
|