# Watcher¶

A Watcher is a tool that monitors the access to a memory region. If a predefined memory location is accessed (read, written to or both) something is done in addition. In its simplest case, a message is printed.

The next few code lines use a single watch address. Any access to it is trapped and calls the Debug Shell.

\ core routines
defer watch-action
\ redefine memory access words
: ! dup watch-addr @ = if watch-action then ! ;
: c@ dup watch-addr @ = if watch-action then c@ ;
: c! dup watch-addr @ = if watch-action then c! ;
\ this one is the last one
: @ dup watch-addr @ = if watch-action then @ ;
\ simply use the debugshell
' ?? is watch-action

\ possible modifications
\  use an address range
\  use a list of addresses (address ranges)


After loading these lines, any word that uses memory access words will be watched for access to a particular address. If it is accessed, the debug shell will come up for further work.