The CALL command is one of the four debugger commands that can be used to execute your program (the others are GO, STEP, and EXIT). The CALL command enables you to execute a routine independently of the normal execution of your program. The CALL command executes a routine whether or not your program actually includes a call to that routine, as long as the routine was linked with your program. When you enter a CALL command, the debugger takes the following actions. For more information, see the qualifier descriptions. 1. Saves the current values of the general registers. 2. Constructs an argument list. 3. Executes a call to the routine specified in the command and passes any arguments. 4. Executes the routine. 5. Displays the value returned by the routine in the return status register. By convention, after a called routine has executed, register R0 contains the function return value (if the routine is a function) or the procedure completion status (if the routine is a procedure that returns a status value). If a called procedure does not return a status value or function value, the value in R0 might be meaningless, and the "value returned" message can be ignored. 6. Restores the values of the general registers to the values they had just before the CALL command was executed. 7. Issues the prompt. The debugger assumes that the called routine conforms to the procedure calling standard (see the OpenVMS Calling Standard). However, the debugger does not know about all the argument- passing mechanisms for all supported languages. Therefore, you might need to specify how to pass parameters, for example, use CALL SUB1(%VAL X) rather than CALL SUB1(X). For complete information about how arguments are passed to routines, see your language documentation. When the current language is C or C++, the CALL command by default now passes arguments by value rather than by reference. In addition, you can now pass the following arguments without using a passing mechanism lexical (such as %REF or %VAL): o Routine references o Quoted strings (treated as %REF strings) o Structures, records, and objects o Floating-point parameters by value in F_, D_, G_, S_, and T_ floating format by dereferencing a variable of that type. If the routine contains parameters that are not read-only, the values assigned to parameters may not be visible, and access to values is unreliable. This is because the debugger adjusts parameter values in an internal argument list, not the program argument list. To examine changing values, consider using static variables instead of parameters. The CALL command converts all floating-point literals to F_ floating format for VAX and Alpha systems and T_floating format for Integrity servers. On Alpha, passing a floating-point literal in a format other than F_floating is not supported, as shown in the example below. A common debugging technique at an exception breakpoint (resulting from a SET BREAK/EXCEPTION or STEP/EXCEPTION command) is to call a dump routine with the CALL command. When you enter the CALL command at an exception breakpoint, any breakpoints, tracepoints, or watchpoints that were previously set within the called routine are temporarily disabled so that the debugger does not lose the exception context. However, such eventpoints are active if you enter the CALL command at a location other than an exception breakpoint.