gdb: Command Files

 
 23.1.3 Command Files
 --------------------
 
 A command file for GDB is a text file made of lines that are GDB
 commands.  Comments (lines starting with '#') may also be included.  An
 empty line in a command file does nothing; it does not mean to repeat
 the last command, as it would from the terminal.
 
    You can request the execution of a command file with the 'source'
 command.  Note that the 'source' command is also used to evaluate
 scripts that are not Command Files.  The exact behavior can be
 configured using the 'script-extension' setting.  SeeExtending GDB
 Extending GDB.
 
 'source [-s] [-v] FILENAME'
      Execute the command file FILENAME.
 
    The lines in a command file are generally executed sequentially,
 unless the order of execution is changed by one of the _flow-control
 commands_ described below.  The commands are not printed as they are
 executed.  An error in any command terminates execution of the command
 file and control is returned to the console.
 
    GDB first searches for FILENAME in the current directory.  If the
 file is not found there, and FILENAME does not specify a directory, then
 GDB also looks for the file on the source search path (specified with
 the 'directory' command); except that '$cdir' is not searched because
 the compilation directory is not relevant to scripts.
 
    If '-s' is specified, then GDB searches for FILENAME on the search
 path even if FILENAME specifies a directory.  The search is done by
 appending FILENAME to each element of the search path.  So, for example,
 if FILENAME is 'mylib/myscript' and the search path contains
 '/home/user' then GDB will look for the script
 '/home/user/mylib/myscript'.  The search is also done if FILENAME is an
 absolute path.  For example, if FILENAME is '/tmp/myscript' and the
 search path contains '/home/user' then GDB will look for the script
 '/home/user/tmp/myscript'.  For DOS-like systems, if FILENAME contains a
 drive specification, it is stripped before concatenation.  For example,
 if FILENAME is 'd:myscript' and the search path contains 'c:/tmp' then
 GDB will look for the script 'c:/tmp/myscript'.
 
    If '-v', for verbose mode, is given then GDB displays each command as
 it is executed.  The option must be given before FILENAME, and is
 interpreted as part of the filename anywhere else.
 
    Commands that would ask for confirmation if used interactively
 proceed without asking when used in a command file.  Many GDB commands
 that normally print messages to say what they are doing omit the
 messages when called from command files.
 
    GDB also accepts command input from standard input.  In this mode,
 normal output goes to standard output and error output goes to standard
 error.  Errors in a command file supplied on standard input do not
 terminate execution of the command file--execution continues with the
 next command.
 
      gdb < cmds > log 2>&1
 
    (The syntax above will vary depending on the shell used.)  This
 example will execute commands from the file 'cmds'.  All output and
 errors would be directed to 'log'.
 
    Since commands stored on command files tend to be more general than
 commands typed interactively, they frequently need to deal with
 complicated situations, such as different or unexpected values of
 variables and symbols, changes in how the program being debugged is
 built, etc.  GDB provides a set of flow-control commands to deal with
 these complexities.  Using these commands, you can write complex scripts
 that loop over data structures, execute commands conditionally, etc.
 
 'if'
 'else'
      This command allows to include in your script conditionally
      executed commands.  The 'if' command takes a single argument, which
      is an expression to evaluate.  It is followed by a series of
      commands that are executed only if the expression is true (its
      value is nonzero).  There can then optionally be an 'else' line,
      followed by a series of commands that are only executed if the
      expression was false.  The end of the list is marked by a line
      containing 'end'.
 
 'while'
      This command allows to write loops.  Its syntax is similar to 'if':
      the command takes a single argument, which is an expression to
      evaluate, and must be followed by the commands to execute, one per
      line, terminated by an 'end'.  These commands are called the "body"
      of the loop.  The commands in the body of 'while' are executed
      repeatedly as long as the expression evaluates to true.
 
 'loop_break'
      This command exits the 'while' loop in whose body it is included.
      Execution of the script continues after that 'while's 'end' line.
 
 'loop_continue'
      This command skips the execution of the rest of the body of
      commands in the 'while' loop in whose body it is included.
      Execution branches to the beginning of the 'while' loop, where it
      evaluates the controlling expression.
 
 'end'
      Terminate the block of commands that are the body of 'if', 'else',
      or 'while' flow-control commands.