Go to the first, previous, next, last section, table of contents.


]doBreak

Function: ]doBreak { [] -> }
file: 15-C-debugger.t
package: muf
status: alpha

This function is invoked by break to do the work of actually invoking the debugger.

Customization of ]doBreak is possible: break actually runs whatever function it finds in the @$s.doBreak property of the job. You may set this property to anything you like. If it is not set to a valid compiledFunction object, break becomes a no-op.

Note that @$s.doBreak is set at login to the value of me$s.doBreak, thus the way to "permanently" change to another break function is to set me$s.doBreak to the desired function.

The default ]doBreak function is currently implemented as

: ]doBreak { [] -> @ }

    ( Save the event in a vector. )
    ( We do this before setting the   )
    ( 'cont tag since we don't want   )
    ( the 'cont tag trying to restore )
    ( the event to the stack when )
    ( invoked:                        )
    ]makeVector -> event

    ( Establish a 'cont tag that returns to caller: )
    withTag cont do{

        ( Establish a 'continue restart jumping to 'cont: )
        [   :function :: { -> ! } 'cont goto ;
            :name     'continue
            :reportFunction "Continue from 'break'."
        | ]withRestartDo{

            ( Invoke debugger.  We don't use     )
            ( "]invokeDebugger" here because it )
            ( checks @$s.debugger_hook, and     )
            ( CommonLisp specifies that 'break'  )
            ( shouldn't use @$s.debugger_hook.  )
            @$s.debugger -> ]debugger
            ]debugger compiledFunction? if
                event debugger call{ $ -> @ }
            fi

            ( If no debugger, kill job: )
            "break: Invalid @$s.debugger, killing job." ,
            nil endJob
        }
        cont
        ]pop
    }
;
']doBreak export
#']doBreak --> .u["root"]$s.doBreak

See section break. See section ]break.


Go to the first, previous, next, last section, table of contents.