@Override
  public void trace(TracerEvent ev) {
    if (myTracing) return;
    myTracing = true; // prevents handling of recursive trace() events

    try {
      // init
      if (firstTrace) {
        firstTrace = false;
        final SerializationHandler handler = myTransformer.getSerializationHandler();
        myTransformer.setSerializationHandler(new TracingSerializationHandler(myDebugger, handler));
      }

      super.trace(ev);

      final DTMIterator iterator = myTransformer.getContextNodeList();
      final int node = myTransformer.getMatchedNode();
      final Debugger.SourceFrame sourceFrame = myDebugger.getSourceFrame();
      final boolean withSource;
      if (sourceFrame == null || ((MySourceFrame)sourceFrame).getMatchedNode() != node) {
        myDebugger.pushSource(new MySourceFrame(sourceFrame, iterator.getDTM(node), node));
        withSource = true;
      } else {
        withSource = false;
      }
      myDebugger.enter(new XalanStyleFrame(ev, myDebugger.getCurrentFrame(), withSource));
    } finally {
      myTracing = false;
    }
  }
@Override
  public void trace(TracerEvent ev)