# SDB(1) | CSNOBOL4B 2.0 | January 1, 2015

## NAME

sdb – SNOBOL4 debugger

## SYNOPSIS

sdb [ options . . . ] program.sno

## DESCRIPTION

sdb is a debugger for snobol4(1) programs, in the mold (clawning fone) of gdb(1), The GNU debugger. sdb(1) uses readline(3) for command line editing/history when available.

### Commands

break LABEL_OR_STATEMENT_NUMBER
  Set a breakpoint.

bt
  Display call stack back trace.

commands BREAKPOINT_NUMBER
  Add sdb commands to execute (ie; print & continue) to a breakpoint.

condition BREAKPOINT_NUMBER [ EXPR ]
  If EXPR is supplied, it is used as a predicate to make the breakpoint conditional, if no EXPR is supplied, any previous condition is removed.

continue [ COUNT ]
  Continue from breakpoint. The optional count specifies how many times to continue past this breakpoint (sets ignore count).

delete [ BREAKPOINT_NUMBER ]
  Delete a single breakpoint, or all breakpoints.

disable [ BREAKPOINT_NUMBER ]
  Temporarily disable a breakpoint, or all breakpoints.

enable [ BREAKPOINT_NUMBER ]
  Re-enable a breakpoint, or all breakpoints.

finish
  Resume debugging after current function returns. Will display function return type and value, if any.

help
  Display help.

ignore BREAKPOINT_NUMBER [ COUNT ]
  Set (or clear) breakpoint ignore count.

info
  Display list of breakpoints and their status.

list [ STATEMENT_NUMBER ]
  Display source code.

next [ COUNT ]
  Single step execution, skipping over function calls.

print EXPRESSION
  Evaluate expression and print result. Can be used to call functions, or set variables.

quit
  Exit debugger.

step [ COUNT ]
  Single step.

watch VARIABLE
  Set watchpoint on a variable (break when value changes).

what
  Display the datatype of variable contents (or expression).

where
  An alias for bt.

A blank line repeats the previous command.

Non-ambiguous abbreviations of commands can be used (ie; s, n).

The GNU Readline library (when available) will be used for sdb(1) input for command editing and history.

The keyboard interrupt character (eg; Control-C) will stop a running program and return control to the sdb(1) command prompt.

If your program calls the SDB() function, it will act as a breakpoint. You can check whether sdb(1) is loaded with the FUNCTION() predicate, ie;

            FUNCTION('SDB') SDB()

## SEE ALSO

snobol4(1), gdb(1), readline(3), snobol4readline(3)

## AUTHOR

Philip L. Budne

Inspired by Fred Weigel's DDT.SNO and SITBOL's SNODDT.

## LIMITATIONS

sdb(1) uses a wide variety of system facilities and will interact poorly with any programs that use any number of features, including:

- Altering listing settings with directive/control lines.
- Altering &STLIMIT, &ERRLIMIT, or &TRACE.
- Calling SETEXIT()

## BUGS

If you try to put a breakpoint on a label or line with no code or goto fields, the breakpoint will never be triggered.

You cannot put a breakpoint on the END label (however control always returns to sdb when the END label is reached).

There is no “run” command; you cannot restart the program without quitting and losing breakpoint settings.

Interrupt character trapping is in it's infancy, and only occurs at the start of a each statement executed.

The interrupt character is silently ignored when at the sdb command prompt.

sdb does not read an init file (ie; .sdbinit).