Debugging and Testing Techniques

From Recital Documentation Wiki
Jump to: navigation, search

Debugging and Testing Techniques

Using the debug() Function

The debug() function allows debugging information messages to be written to a text file in the currently set DB_DEBUGDIR directory.

logical = debug(message as character)

The text file is named debug + process ID + .txt. A copy of the latest debug file can also be found in the file debug.txt. The setting set debug enables (on) or disables (off) the logging of the messages.

set debug on
 
// app1.prg
debug("program started by: " + user())
//...
debug("option chosen: " + m_opt)

Using the assert Command

The assert command is used for program debugging purposes: to display a message box with options when a condition evaluates to False (.F.).

assert <condition as logical> [message <message as character>]

The message box has four buttons, offering the following options:

Button Option
Debug Suspends program execution and starts the Debugger. The Debug option is only available if the program is being run uncompiled.
Cancel Stops program execution.
Ignore Continues program execution.
Ignore All Continues program execution and issues set asserts off, causing subsequent asserts to be ignored.

Dumping Variables to an External Text File

The list memory command can be used to list all current memory variables, including arrays and objects, to a text file.

list memory to file <filename as character>

Other current status information can be output in a similar way:

  • list status - list status information, including data, settings and keys
  • list calls - list call stack for the current program, procedure or function
  • list procedure - list names of active procedures and functions
  • list classes - list active system, user-defined, class library and API classes

Using the Workbench Debugger

The debug command displays a pop-up debugger allowing the specified program to be monitored during execution.

debug <filename as character>

The debugger consists of four lines of information about the current program and eighteen push buttons. Program information consists of the following lines:

OPERATION Displays DEBUG operation: STEP, BREAKPOINT or WATCHPOINT.
PROGRAM Displays the name of the current procedure or program.
LINE# Displays the current line number.
COMMAND Displays the next program line to be executed.

The eighteen push buttons are used to access information about the current environment and to specify memory variables and conditions to monitor during program execution. The pop-up debugger provides the following push buttons:

BUTTON EFFECT
Step Step through a line at a time.
Suspend Suspend the program to go to the interactive prompt, RESUME to restart.
Cancel Cancel program execution and create error.mem.
Memory Display currently declared memory variables.
Status Display currently open tables (and their indexes, current record, etc.).
Calls Show program/procedure call stack.
Watch Set a watch point. When Executing the program, execution will stop when the specified memory variable's value changes.
Break Set a break point. When Executing the program, execution will stop when the specified condition becomes true.
History Show command history trace.
Execute Run program without stepping until watch point or break point reached.
Wpclear Clear all watch points.
Bpclear Clear all break points.
Bpmark Mark the current line as a break point.
Bpdrop Clear a particular break point.
Wpdrop Clear a particular watch point.
Bpshow Show all break points.
Wpshow Show all watch points.
Quit Exit the program and debugger.

Use the [UP], [DOWN], [LEFT], and [RIGHT] arrow keys to navigate the push buttons, and press the [RETURN] key to select a button. You may also type the accelerator key to select a button. The accelerator keys are the highlighted letters in the label of each push button.