DBG$HELP.HLB  —  DEBUG  SET  SCOPE
    Establishes how the debugger looks up symbols (variable names,
    routine names, line numbers, and so on) when a path-name prefix
    is not specified.

    Format

      SET SCOPE  location[, . . . ]

1  –  Parameters

 location

    Denotes a program region (scope) to be used for the
    interpretation of symbols that you specify without a path-name
    prefix. A location can be any of the following, unless you
    specify /CURRENT or /MODULE.

    path-name      Specifies the scope denoted by the path-name
    prefix         prefix. A path-name prefix consists of the
                   names of one or more nesting program elements
                   (module, routine, block, and so on), with each
                   name separated by a backslash character (\).
                   When a path-name prefix consists of more than
                   one name, list a nesting element to the left of
                   the backslash and a nested element to the right of
                   the backslash. A common path-name prefix format is
                   module\routine\block\.

                   If you specify only a module name and that name is
                   the same as the name of a routine, use /MODULE;
                   otherwise, the debugger assumes that you are
                   specifying the routine.
    n              Specifies the scope denoted by the routine which
                   is n levels down the call stack (n is a decimal
                   integer). A scope specified by an integer changes
                   dynamically as the program executes. The value 0
                   denotes the routine that is currently executing,
                   the value 1 denotes the caller of that routine,
                   and so on down the call stack. The default scope
                   search list is 0,1,2, . . . ,n, where n is the
                   number of calls in the call stack.
    \              Specifies the global scope-that is, the set of
    (backslash)    all program locations in which a global symbol is
                   known. The definition of a global symbol and the
                   way it is declared depends on the language.

    When you specify more than one location parameter, you establish
    a scope search list. If the debugger cannot interpret the symbol
    using the first parameter, it uses the next parameter, and
    continues using parameters in order of their specification until
    it successfully interprets the symbol or until it exhausts the
    parameters specified.

2  –  Qualifiers

2.1    /CURRENT

    Establishes a scope search list that is like the default search
    list (0,1,2, . . . ,n), numeric scope specified as the command
    parameter. Scope 0 is the PC scope, and n is the number of calls
    in the call stack.

    When using SET SCOPE/CURRENT, note the following conventions and
    behavior:

    o  The default scope search list must be in effect when the
       command is entered. To restore the default scope search list,
       enter the CANCEL SCOPE command.

    o  The command parameter specified must be one (and only one)
       decimal integer from 0 to n.

    o  In screen mode, the command updates the predefined source,
       instruction, and register displays SRC, INST, and REG,
       respectively, to show the routine on the call stack in which
       symbol searches are to start.

    o  The default scope search list is restored when program
       execution is resumed.

2.2    /MODULE

    Indicates that the name specified as the command parameter is a
    module name and not a routine name. You need to use /MODULE only
    if you specify a module name as the command parameter and that
    module name is the same as the name of a routine.

3  –  Description

    By default, the debugger looks up a symbol specified without a
    path-name prefix according to the scope search list 0,1,2, . . .
    ,n, where n is the number of calls in the call stack. This
    scope search list is based on the current PC value and changes
    dynamically as the program executes. The default scope search
    list specifies that a symbol lookup such as EXAMINE X first looks
    for X in the routine that is currently executing (scope 0, also
    known as the PC scope); if no X is visible there, the debugger
    looks in the caller of that routine (scope 1), and so on down the
    call stack; if X is not found in scope n, the debugger searches
    the rest of the run-time symbol table (RST)-that is, all set
    modules and the global symbol table (GST), if necessary.

    In most cases, this default scope search list enables you
    to resolve ambiguities in a predictable, natural way that is
    consistent with language rules. But if you cannot access a symbol
    that is defined multiple times, use either of the following
    techniques:

    o  Specify the symbol with a path-name prefix. The path-name
       prefix consists of any nesting program units (for example,
       module\routine\block) that are necessary to specify the symbol
       uniquely. For example:

       DBG> EXAMINE MOD4\ROUT3\X
       DBG> TYPE MOD4\27

    o  Establish a new default scope (or a scope search list) for
       symbol lookup by using the SET SCOPE command. You can then
       specify the symbol without using a path-name prefix. For
       example:

       DBG> SET SCOPE MOD4\ROUT3
       DBG> EXAMINE X
       DBG> TYPE 27

4  –  Description, Continued...

    The SET SCOPE command is useful in those cases where otherwise
    you would need to use a path name repeatedly to specify symbols.

    SET SCOPE changes the debugger's language setting to the language
    of the specified scope.

    To restore the default scope search list, use the CANCEL SCOPE
    command.

    When the default scope search list is in effect, you can use the
    SET SCOPE/CURRENT command to specify that symbol searches start
    at a numeric scope other than scope 0, relative to the call stack
    (for example, scope 2).

    When you use the SET SCOPE command, the debugger searches only
    the program locations you specify explicitly, unless you specify
    /CURRENT. Also, the scope or scope search list established with a
    SET SCOPE command remains in effect until you restore the default
    scope search list or enter another SET SCOPE command. However, if
    you specify /CURRENT, the default scope search list is restored
    whenever program execution is resumed.

    The SET SCOPE command updates a screen-mode source or instruction
    display only if you specify /CURRENT.

    If a name you specify in a SET SCOPE command is the name of
    both a module and a routine, the debugger sets the scope to the
    routine. In such cases, use the SET SCOPE/MODULE command if you
    want to set the scope to the module.

    If you specify a module name in a SET SCOPE command, the debugger
    sets that module if it is not already set. However, if you want
    only to set a module, use the SET MODULE command rather than the
    SET SCOPE command, to avoid the possibility of disturbing the
    current scope search list.

    For information specific to Ada programs, type Help Language_
    Support Ada.

    Related commands:

       CANCEL ALL
       SEARCH
       SET MODULE
       (SHOW,CANCEL) SCOPE
       SHOW SYMBOL
       SYMBOLIZE
       TYPE

5  –  Examples

    1.DBG> EXAMINE Y
      %DEBUG-W-NOUNIQUE, symbol 'Y' is not unique
      DBG> SHOW SYMBOL Y
          data CHECK_IN\Y
          data INVENTORY\COUNT\Y
      DBG> SET SCOPE INVENTORY\COUNT
      DBG> EXAMINE Y
      INVENTORY\COUNT\Y: 347.15
      DBG>

      In this example, the first EXAMINE Y command indicates that
      symbol Y is defined multiple times and cannot be resolved from
      the current scope search list. The SHOW SYMBOL command displays
      the different declarations of symbol Y. The SET SCOPE command
      directs the debugger to look for symbols without path-name
      prefixes in routine COUNT of module INVENTORY. The subsequent
      EXAMINE command can now interpret Y unambiguously.
Close Help