Debug - step through

>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Primer

# Debug - stepping through a verb

Debug requires a prokey, and will fail with domain error if a prokey is not set. For more information, see products. If you have not purchased a prokey you won't be able to use debug on your system. You will probably still find it interesting to read these debug sections.

In an earlier section you added a debugging line to a verb definition that allowed you to see the results of intermediate steps when the verb was run. Sometimes you need more powerful tools than that.

Use `load` to load the debug utilities.

       load 'debug'

Open your script file cf.ijs and run it.

Let's execute `centigrade`, but with a stop on each line so that you can take a look at exactly what is going on.

       dbss 'centigrade *:*'

The `dbss` (Set Stop) argument requests a stop before executing all, indicated by `*:*`, lines in `centigrade`.

       dbr 1

`dbr` with an argument of 1 requests that the system suspend execution when an error or stop occurs. When a verb is suspended it is halted in mid execution. You can examine definitions, change definitions, and you can resume execution of the suspended verb.

       centigrade 212
    ¦stop
    ¦       t1=.y.-32
    ¦centigrade[0]

The error report (bars at the left margin) indicates execution stopped on line 0 of `centigrade` and shows the sentence from that line.

The execution of `centigrade` is suspended and the indent of six spaces, rather than three, indicates the suspension. The variable `y.` is the argument.

          y.
    212

The stop occurs before the line is executed, so `t1` has not been defined and if you try to look at it you will get a value error.

Use `dbrun` to continue execution. It will run the current line, and because stops are set on all lines it will then stop on the next line.

          dbrun ''
    ¦stop
    ¦       t2=.t1*5
    ¦centigrade[1]

          t1
    180

          t1*5
    900

`centigrade` is now stopped on line 1, and as you can see, you are able to check the value of local t1 that was defined in line 0. Step through the next lines and examine locals.

          dbrun ''
    ¦stop
    ¦       t3=.t2%9
    ¦centigrade[2]

          t2
    900

          t2%9
    100

          dbrun ''
    100

You are no longer suspended in `centigrade` and you are back to the normal indent of three spaces.

Turn off the request for debug suspensions and reset to have no stops.

       dbr 0
       dbss ''

>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Primer