The WAM debugger
Author: Daniel Diaz
Keywords: GNU Prolog, manual, Prolog, compiler, constraints, finite domains

### 5.6 The WAM debugger

In some cases it is interesting to have access to the WAM data structures. This sub-debugger allows the user to inspect/modify the contents of any stack or register of the WAM. The WAM debugger is invoked using the built-in predicate wam_debug/0 (section 5.3.1) or the W debugger command (section 5.5). The following table presents the specific commands of the WAM debugger:

Command | Description
write A [N] | write N terms starting at the address A using write/1 (section 8.14.6)
data A [N] | display N words starting at the address A
modify A [N] | display and modify N words starting at the address A
where A | display the real address corresponding to A
what RA | display what corresponds to the real address RA
deref A | display the dereferenced word starting at the address A
envir [SA] | display the contents of the environment located at SA (or the current one)
backtrack [SA] | display the contents of the choice-point located at SA (or the current one)
backtrack all | display all choice-points
quit | quit the WAM debugger
help | display a summary of available commands

In the above table the following conventions apply:

- elements between [ and ] are optional.
- N is an optional integer (defaults to 1).
- A is a WAM address, its syntax is: BANK_NAME [ [ N ] ], i.e. a bank name possibly followed by an index (defaults to 0). BANK_NAME is either:
  - reg: WAM general register (stack pointers, continuation, ...).
  - x: WAM X register (temporary variables, i.e. arguments).
  - y: WAM Y register (permanent variables).
  - ab: WAM X register saved in the current choice-point.
  - STACK_NAME: WAM stack (STACK_NAME in local, global, trail, cstr).
- SA is a WAM stack address, i.e. STACK_NAME [ [ N ] ] (special case of WAM addresses).
- RA is a real address, its syntax is the syntax of C integers (in particular the notation 0x… is recognized).

It is possible to only use the first letters of a commands and bank names when there is no ambiguity. Also the square brackets [ ] enclosing the index of a bank name can be omitted. For instance the following command (showing the contents of 25 consecutive words of the global stack from the index 3): data global[3] 25 can be abbreviated as: d g 3 25.

Copyright (C) 1999-2018 Daniel Diaz Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. More about the copyright