anchor.diff:  
   -type trace_point() :: atom().
   -type trace_points() :: [trace_point()].
  +-type stack() :: list(term()).
   
   -callback ssh_dbg_trace_points() -> trace_points().
   -callback ssh_dbg_flags(trace_point()) -> [atom()].
   -callback ssh_dbg_on(trace_point() | trace_points()) -> term().
   -callback ssh_dbg_off(trace_point() | trace_points()) -> term().
   -callback ssh_dbg_format(trace_point(), term()) -> iolist() | skip.
  +-callback ssh_dbg_format(trace_point(), term(), stack()) -> {iolist() | skip, stack()}.
  +
  +-optional_callbacks([ssh_dbg_format/2, ssh_dbg_format/3]).  % At least one of them are to be used
   
   %%%================================================================
   
  
positive.code: 
  %%%----------------------------------------------------------------
  init(_) ->
      {ok, #data{}}.
  
  %%%----------------------------------------------------------------
  handle_call({switch,on,Types}, _From, D) ->
  
negative.code:     {reply, {error,{unknown_call,C}}, D}.
      
  
  handle_cast({new_proc,Pid}, D) ->
      monitor(process, Pid),
      {noreply, D};
  
  handle_cast(C, D) ->
      io:format('*** Unknown cast: ~p~n',[C]),
      {noreply, D}.
      
  
  handle_info({'DOWN', _MonitorRef, process, Pid, _Info}, D) ->
      %% Universal real-time synchronization (there might be dbg msgs in the queue to the tracer):
      timer:apply_after(20000, ?MODULE, ets_delete, [?MODULE, Pid]),
      {noreply, D};
  
  handle_info(C, D) ->
      io:format('*** Unknown info: ~p~n',[C]),
      {noreply, D}.
  