    
      Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at
    
          http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.

This file contains the text displayed by the 'help' command in fdb.

It is divided into "topics". For example, when an fdb user types
'help break', the [break] topic below is displayed.

The first and last lines of each topic should be blank.
They don't get displayed in fdb; they are here only
to make this file more easily readable.

Help text should be formatted to not wrap
when displayed on an 80-character-wide console.
The following line is 80 characters wide.

--------------------------------------------------------------------------------

[?]

Undefined command. Do just 'help' to see a list of all fdb commands.

[break]

Set breakpoint at specified line or function.
Examples:
  break 87
    Sets a breakpoint at line 87 of the current file.
  break myapp.mxml:56
    Sets a breakpoint at line 56 of myapp.mxml.
  break #3:29
    Sets a breakpoint at line 29 of file #3.
  break doThis
    Sets a breakpoint at function doThis() in the current file.
  break myapp.mxml:doThat
    Sets a breakpoint at function doThat() in file myapp.mxml.
  break #3:doOther
    Sets a breakpoint at function doOther() in file #3.
  break
   Sets a breakpoint at the current execution address in the
   current stack frame. This is useful for breaking on return
   to a stack frame.
To see file names and numbers, do 'info sources' or 'info files'.
To see function names, do 'info functions'.
Abbreviated file names and function names are accepted if unambiguous.
If line number is specified, break at start of code for that line.
If function is specified, break at start of code for that function.
See 'commands' and 'condition' for further breakpoint control.

[bt]

Backtrace of the stack.

[catch]

Halt when an exception is thrown.  This only affects caught
exceptions -- that is, exceptions that are going to be handled
by a "catch" block.  Uncaught exceptions always halt in the
debugger.

Use the "delete" command to delete a catchpoint.

Examples:
  catch *
    Halts when any exception is thrown.
  catch ReferenceError
    Halts whenever a ReferenceError is thrown, whether
    caught or uncaught.

[cf]

Display the name and number of the current file
or change the current file.
Examples:
  cf
    Displays the name and number of the current file.
  cf myapp.mxml
    Changes the current file to myapp.mxml.
  cf #29
    Changes the current file to file #29.
To see file names and numbers, do 'info sources' or 'info files'.
Abbreviated file names are accepted if unambiguous.
Listing a file with 'list' also makes that file the current file.

[clear]

Clear breakpoint at specified line or function.
Examples:
  clear 87
    Clears the breakpoint at line 87 of the current file.
  clear myapp.mxml:56
    Clears the breakpoint at line 56 of myapp.mxml.
  clear #3:29
    Clears the breakpoint at line 29 of file #3.
  clear doThis
    Clears the breakpoint at function doThis() in the current file.
  clear myapp.mxml:doThat
    Clears the breakpoint at function doThat() in file myapp.mxml.
  clear #3:doOther
    Clears the breakpoint at function doOther() in file #3.
  clear
    Clears breakpoint of the current line in the current file. 
To see file names and numbers, do 'info sources' or 'info files'.
To see function names, do 'info functions'.
Abbreviated file names and function names are accepted if unambiguous.
If line number is specified, all breakpoints in that line are cleared.
If function is specified, breakpoints at beginning of function are cleared.

[continue]

Continue execution after stopping at breakpoint.
This command takes no arguments.

[condition]


Specify breakpoint number N to break only if COND is true.
Usage is `condition N COND', where N is an integer and COND is an
expression to be evaluated whenever breakpoint N is reached.

[commands]

Set commands to be executed when a breakpoint is hit.
Give breakpoint number as argument after `commands`.
With no argument, the targeted breakpoint is the last one set.
The commands themselves follow starting on the next line.
Type a line containing "end" to indicate the end of them.
Give "silent" as the first line to make the breakpoint silent;
then no output is printed when it is hit, except what the commands print.
Example:
  (fdb) commands
  Type commands for when breakpoint 1 is hit, one per line.
  End with a line saying just 'end'.
  >w
  >end

[connect]

Connect to the debugging player listening on a port.
The only player that currently listens for debug connections
is mobile specific, others always connect.

Examples:
  connect
    Connect to the debug player listening on port 7936.
  connect 7938
    Connect to the debug player listening on port 7938.    

[delete]

Delete one or more breakpoints.
Examples:
  delete
    Deletes all breakpoints.
  delete 2 5
    Deletes breakpoints #2 and #5.
To see breakpoint numbers, do 'info breakpoints'.

[directory]

Modify the list of directories in which fdb searches for source files.

Examples:

  directory
    Restores list to the default, which is the directory in which the source
    file was compiled into object code, followed by the current working
    directory.

  directory C:\MySource        (Windows)
  directory /MySource          (Mac)
    Adds the specified directory to the beginning of the list of directories
    which will be searched for source.  When looking for the source for class
    mypackage.MyClass, for example, the debugger would look for both
    C:\MySource\mypackage\MyClass.as and C:\MySource\MyClass.as.

  directory C:\Dir1;C:\Dir2    (Windows -- use ';' as separator)
  directory /Dir1:/Dir2        (Mac -- use ':' as separator)
    Adds several directories to the beginning of the list of directories
    which will be searched for source.

To see the current list, do 'show directories'.

[disable]

Disable one or more breakpoints or auto-display expressions.
Examples:
  disable
  disable breakpoints
    Disables all breakpoints.
  disable 2 5
  disable breakpoints 2 5
    Disables breakpoints #2 and #5.
  disable display
    Disables all auto-display expressions.
  disable display 1 3
    Disables auto-display expressions #1 and #3.
To see breakpoint numbers, do 'info breakpoints'.
To see auto-display expression numbers, do 'info display'.

[disassemble]

(ActionScript 2 only; not supported when debugging ActionScript 3)

Disassemble a specified portion of source code.
The default is the current listing line.
Arguments supported are the same as with the list command
Examples:
  disassemble 87
    Disassembles line 87 in the current file.
  disassemble 87 102
    disassembles lines 87 to 102 in current file.
  disassemble doThis
      Disassembles the function doThis() in the current file.
In addition to using simple line numbers as above, you can specify lines
in additional ways:
   myapp.mxml
      Line 1 in myapp.mxml.
   myapp.mxml:doThat
      The first line of function doThat() in myapp.mxml.
   myapp.mxml:56
      Line 56 in myapp.mxml.
   #3
      Line 1 in file #3.
   #3:doOther
      The line in file #3 where the function doOther() begins.
   #3:29
      Line 29 in file #3.

[display]

Add an expression to the list of auto-display expressions.
Example:
  display employee.name
    Add 'employee.name' to the list of auto-display expressions.
    Every time fdb stops, the value of employee.name will be displayed.
The argument for this command is similar to that for 'print'.
To see the list of auto-display expressions and their numbers,
do 'info display'.

[down]

Select and print stack frame called by this one.
Subsequent 'info arguments' and 'info locals' commands will display
the locals and arguments of the selected frame.
See 'up' and 'frame' 

[enable]

Enable one or more breakpoints or auto-display expressions.
Examples:
  enable
  enable breakpoints
    Enables all breakpoints.
  enable 2 5
  enable breakpoints 2 5
    Enables breakpoints #2 and #5.
  enable display
    Enables all auto-display expressions.
  enable display 1 3
    Enables auto-display expressions #1 and #3.
To see breakpoint numbers, do 'info breakpoints'.
To see auto-display expression numbers, do 'info display'.

[file]

Specify an application to be debugged, without starting it.
Examples:
  file http://www.mysite.com/myapp.mxml
    Specify an MXML application to be debugged.
  file myapp.swf
    Specify a local SWF file to be debugged, in the current directory.
    In this case myapp.swd (the file containing the debugging information)
    must also exist in the current directory.
This command does not actually cause the application to start;
use the 'run' command with no argument to start debugging the application.
Instead of using 'file <target>' and then 'run', you can simply specify the
application to be debugged as an argument of 'run':
  run http://mysite.com/myapp.mxml
  run myapp.swf
You can also specify the application to be debugged
as a command-line argument when you start fdb:
  fdb http://www.mysite.com/myapp.mxml
  fdb myapp.swf
In this case you do not need to use either 'file' or 'run'.
If you 'run' without specifying an application to debug,
fdb will wait for any application to connect to it.

[finish]

Execute until current function returns.
This command takes no arguments.

[frame]

Select and print a particular stack frame.
This command takes an optional argument, a frame number.
If no argument is provided default is to return
to the current top frame (i.e. frame 0).
Examples:
  frame 4
  frame
Subsequent 'info arguments' and 'info locals' commands will display
the locals and arguments of the selected frame.
See 'up' and 'down' and 'bt' 

[handle]

Specify how fdb should handle a fault in the Flash Player.
Examples:
  handle recursion_limit stop
    When a recursion_limit fault occurs, display message in fdb
    and stop as if at breakpoint.
  handle all print nostop
    When any kind of fault occurs, display message in fdb but don't stop.
First argument is a fault name or 'all'.
Additional arguments are actions that apply to that fault.
To see fault names, do 'info handle'.
Actions are print/noprint and stop/nostop.
'print' means print a message if this fault happens.
'stop' means reenter debugger if this fault happens. Implies 'print'.

[help]

New to fdb? Do 'tutorial' for basic info.
List of fdb commands:
bt (bt)             Print backtrace of all stack frames
break (b)           Set breakpoint at specified line or function
catch (ca)          Halt when an exception is thrown
cf (cf)             Display the name and number of the current file
clear (cl)          Clear breakpoint at specified line or function
condition (cond)    Apply/remove conditional expression to a breakpoint
connect (con)       Connect to debug player
continue (c)        Continue execution after stopping at breakpoint
commands (com)      Sets commands to execute when breakpoint hit
delete (d)          Delete breakpoints or auto-display expressions
directory (dir)     Add a directory to the search path for source files
disable (disab)     Disable breakpoints or auto-display expressions
disassemble (disas) Disassemble source lines or functions
display (disp)      Add an auto-display expressions
enable (e)          Enable breakpoints or auto-display expressions
file (fil)          Specify application to be debugged.
finish (f)          Execute until current function returns
handle (han)        Specify how to handle a fault
help (h)            Display help on fdb commands
home (ho)           Set listing location to where execution is halted
info (i)            Display information about the program being debugged
kill (k)            Kill execution of program being debugged
list (l)            List specified function or line
next (n)            Step program
print (p)           Print value of variable EXP
pwd (pw)            Print working directory
quit (q)            Exit fdb
run (r)             Start debugged program
set (se)            Set the value of a variable
source (so)         Read fdb commands from a file
step (s)            Step program until it reaches a different source line
tutorial (t)        Display a tutorial on how to use fdb
undisplay (u)       Remove an auto-display expression
viewswf (v)         Set or clear filter for file listing based on swf
watch (wa)          Add a watchpoint on a given variable
what (wh)           Displays the context of a variable
where (w)           Same as bt
Type 'help' followed by command name for full documentation.

[home]

Set the listing location to where execution is halted.

[info]

Generic command for showing things about the program being debugged.
List of info subcommands:
info arguments (i a)    Argument variables of current stack frame
info breakpoints (i b)  Status of user-settable breakpoints
info display (i d)      Display list of auto-display expressions
info files (i f)        Names of targets and files being debugged
info functions (i fu)   All function names
info handle (i h)       How to handle a fault
info locals (i l)       Local variables of current stack frame
info scopechain (i sc)  Scope chain of current stack frame
info sources (i so)     Source files in the program
info stack (i s)        Backtrace of the stack
info swfs (i sw)        List of swfs in this session
info targets(i t)       Application being debugged
info variables (i v)    All global and static variable names
Type 'help info' followed by info subcommand name for full documentation.

[info arguments]

Display arguments of current stack frame.

[info breakpoints]

Display status of all breakpoints and watchpoints.
The Type column indicates one of:
   breakpoint   - normal breakpoint
   watchpoint   - watchpoint
The Disp column contains one of 'keep', 'del', or 'dis' to indicate
the disposition of the breakpoint after it gets hit. 'dis' means that the
breakpoint will be disabled, while 'del' means it will be deleted.  
The 'Address' and 'What' columns indicate the address and file/line
number respectively. 

[info display]

Display list of auto-display expressions and their numbers.

[info files]

Display names and numbers of the files for the application being debugged,
including source files, framework files and autogenerated files.
Examples:
  info files
    Lists all files, alphabetically by category
  info files my
  info files my*
    Lists all files whose names start with "my", alphabetically.
  info files *.as
    Lists all files whose names end with ".as", alphabetically.
  info files *foo*
    Lists all files whose names contain "foo", alphabetically. 
Files are displayed in name#N format, where N is the file number.
In many commands you can use #N in place of a file name.

[info functions]

Display function names.
Examples:
  info functions .
    Display all functions in the current file.
  info functions myapp.mxml
    Display all functions in myapp.mxml.
  info functions #3
    Displays all functions in file #3.
  info functions
    Displays all functions in all files.
To see file names and numbers, do 'info sources' or 'info files'.
Abbreviated file names are accepted if unambiguous.

[info handle]

Display what fdb does when a fault occurs in the Flash Player.
Examples:
  info handle
    Display how fdb handles all faults.
  info handle recursion_limit
    Display how fdb handles a recursion_limit fault.

[info locals]

Dislpay local variables of current stack frame.

[info scopechain]

Display the scope chain of the current stack frame.  The scope chain is
the list of objects that is searched when the Flash player is trying
to resolve a symbol name.

[info sources]

Display names and numbers of the source files for the application being
debugged. Framework files and autogenerated files are not included.
Files are displayed in name#N format, where N is the file number.
In many commands you can use #N in place of a file name.

[info stack]

Backtrace of the stack.

[info swfs]

Display swfs that are known to the debugging session.  See
the command 'viewswf' for details on how the file listing
can be filtered based on swf name. 

[info targets]

Display the URL (http: or file:) of the application being debugged.

[info variables]

Display all global and static variable names and values.

[info ?]

Undefined info command. Try 'help info'.

[kill]

Kill execution of program being debugged.
This command takes no arguments.

[list]

List lines of code in a source file.
Examples:
  list
    Lists ten more lines in current file after or around previous listing.
  list -
    Lists the ten lines in current file before a previous listing.
  list 87
    Lists ten lines in current file around line 87.
  list 87 102
    Lists lines 87 to 102 in current file.
In addition to using simple line numbers as above, you can specify lines
in seven additional ways:
  doThis
      The first line of function doThis() in the current file.
   myapp.mxml
      Line 1 in myapp.mxml.
   myapp.mxml:doThat
      The first line of function doThat() in myapp.mxml.
   myapp.mxml:56
      Line 56 in myapp.mxml.
   #3
      Line 1 in file #3.
   #3:doOther
      The line in file #3 where the function doOther() begins.
   #3:29
      Line 29 in file #3.
To see file names and numbers, do 'info sources' or 'info files'.
To see function names, do 'info functions'.
Abbreviated file names and function names are accepted if unambiguous.
Listing a file makes that file the current file. (See 'cf' command.)

[next]

Step program, proceeding through subroutine calls.
  next
    Step once.
  next 3
    Step 3 times, or until the program stops for another reason.
Like the 'step' command as long as subroutine calls do not happen;
when they do, the call is treated as one instruction.

[print]

Print value of variable or expression.
Examples:
  print i
    Print the value of 'i'.
  print employee.name
    Print the value of 'employee.name'.
  print employee
    Print the value of the 'employee' Object.
    This may simplay display something like [Object 10378].
  print employee.
    Print the values of all the properties of the 'employee' Object.
  print *employee
    Print the values of all the properties of the 'employee' Object.
    The prefix * operator is the prefix alternative to the postfix . operator.
  print #10378.
    Print the values of all the properties of Object #10378.
Variables accessible are those of the lexical environment of the selected
stack frame, plus all those whose scope is global or an entire file.

[pwd]

Print the current working directory.
This is the directory from which fdb was launched; it cannot be
changed within fdb. The argument for 'run' and 'source' can be
specified relative to this directory.
This command takes no arguments.

[quit]

Exit fdb.
This command takes no arguments.

[run]

Start a debugging session.
Examples:
  run http://www.mysite.com/myapp.mxml
    Runs the specified MXML application.
  run myapp.swf
  run mydir\myapp.swf
  run c:\mydir\myapp.swf
    Runs the local SWF file myapp.swf, which can be specified
	either relative to the current directory (see 'pwd' command)
	or using an absolute path. In these cases, myapp.swd
    (the file containing the debugging information) must also
    exist in the same directory as myapp.swf.
  run
    Run the application previously specified by the 'file' command.
    If no application has been specified, fdb will wait for one
    to connect to it, and time out if none does so.
'run' will start the application in a browser or standalone Flash Player.
As soon as the application starts, it will break into fdb so that you can
set breakpoints, etc.

On the Macintosh, the only supported form of the command is 'run' with no
arguments.  You must then manually launch the Flash player.

[set]

Set the value of a variable or a convenience variable.
Convenience variables are variables that exist entirely 
within fdb; they are not part of your program.
Convenience variables are prefixed with '$' and can 
be any name that does not conflict with any existing
variable.  For example, $myVar.  Convenience variables
are also used to control various aspects of fdb.  

The following convenience variables are used by fdb.
$listsize          - number of source lines to display for 'list'
$columnwrap        - column number on which output will wrap
$infostackshowthis - if 0, does not display 'this' in stack backtrace
$invokegetters     - if 0, prevents fdb from firing getter functions
$bpnum             - the last defined breakpoint number
$displayattributes - if 1, 'print var.' displays all attributes of members
                     of 'var' (e.g. private, static)

Examples:
  set i = 3
    Sets the variable 'i' to the number 3.
  set employee.name = "Susan"
    Sets the variable 'employee.name' to the string "Susan".
  set $myVar = 20
    Sets the convenience variable '$myVar' to the number 20

[show]

Generic command for showing things about the state of fdb.
List of show subcommands:
show break (sh b)       Suspended execution location and reason
show directories (sh d) Directories to be searched for source files
show files (sh f)       Target files and paths
show functions (sh fu)  Function line mapping information 
show locations (sh l)   Breakpoint locations
show memory (sh m)      Current memory usage
show net (sh n)         Player message statistics 
show properties (sh p)  Values of properties
show uri (sh u)         Player's URI for this session 
show variable (sh v)    Raw variable retrieval
Type 'help show' followed by show subcommand name for full documentation.

[show break]

Display the offset within the SWF on which the program has halted

[show directories]

Display current search path for finding source files.

[show files]

Display path and file name for all of the target files

[show functions]

Display function-to-line-number mapping information.
Examples:
  show functions .
    Shows mapping information for all functions in the current file.
  show functions myapp.mxml
    Shows mapping information for all functions in myapp.mxml.
  show functions #3
    Shows mapping information for all functions in file #3.
  show functions
    Shows mapping information for all functions in all files.
To see file names and numbers, do 'info sources' or 'info files'.
Abbreviated file names are accepted if unambiguous.

[show locations]

Displays the list of locations that are set for each breakpoint

[show memory]

Display Java VM memory statistics.

[show net]

Display information about messages that have been sent to,
and received from, the Flash Player.

[show properties]

Displays a list of convenience variables used within debugger 

[show uri]

Display the URI that the player has sent for this session.

[show variable]

Display the value of a members of a variable.  Two parameters are
required; the first is the numeric variable identifier, the second
is the name of property on the variable.  The convenience variable
$invokegetters is used to determine whether the property getter,
assuming it exists, will be fired or not.
Example:
    show variable 1 __proto__

[show ?]

Undefined show command. Try 'help show'.

[source]

Read fdb commands from a file and execute them.
  source mycommands.txt
  source mydir\mycommands.txt
  source c:\mydir\mycommands.txt
    Reads mycommands.txt and executes the fdb commands in it.
    The file containing the commands can be specified either
	relative to the current directory (see 'pwd' command)
	or using an absolute path.
The file .fdbinit is read automatically in this way when fdb is started.
Only the current directory is searched for .fdbinit. This means that
you can have set up multiple .fdbinit files for different projects.

[step]

Step program until it reaches a different source line.
Examples:
  step
    Step once.
  step 3
    Step 3 times, or until the program stops for another reason.

[tutorial]

Display a tutorial on how to use fdb.
This command takes no arguments.

[Tutorial]

A typical fdb session:
Start an application with 'run'.
View file names with 'info sources'.
List a file with 'list'.
Set breakpoints with 'break'.
Execute program with 'continue' until a breakpoint is hit.
Examine state of program with 'where', 'print', 'info locals'.
Execute individual statements with 'next', 'step', and 'finish'.
Resume execution with 'continue'.
Quit fdb with 'quit'.

[undisplay]

Remove one or more auto-display expressions.
Examples:
  undisplay
    Remove all auto-display expressions.
  undisplay 2 7
    Remove auto-display expressions #2 and #7.
To see the list of auto-display expressions and their numbers,
do 'info display'.

[up]

Select and print stack frame that called this one.
Subsequent 'info arguments' and 'info locals' commands will display
the locals and arguments of the selected frame.
See 'down' and 'frame'

[viewswf]

Sets or clears filter for file listing (i.e. 'info files' 
and 'info sources'), based on swf name. 
Without any parameters, all files will be shown.  If the same
file exists in one or more swfs, the listing will only display
the first instance of the file.  To access other instances
of the file, use the file's number (e.g. 'list #192') or
use this command with a parameter (see below) to display files
from a specific swf.  With a single parameter, the swf name
as displayed by the 'info swfs' command, only the files from
the specified swf will be displayed in the file listing.  
Files from other swfs will not be shown.  This command also 
affects commands that accept a file as a parameter (e.g. 'break')
Example:
  viewswf myApp.mxml.swf
    Only files from myApp.mxml.swf will be displayed.
  viewswf 
    All files from all swfs will be displayed.
 
[watch]

Add a watchpoint on a given variable. The debugger will halt
execution when the variable's value changes.
Example:
  watch foo

[what]

Displays the context in which a variable is resolved. 

[where]

Backtrace of the stack.

[zzz]

((( Keep this unused topic at the end of the file    )))
((( so that the next-to-last one is parsed properly. )))
