public class BinaryNode {
  private int data;
  private BinaryNode leftNode, rightNode;
}

public class BinaryTree {
  private BinaryNode root;

  public void insert(BinaryNode node) {
    root = insert(root, node);
  }

  private BinaryNode insert(BinaryNode currentNode, BinaryNode newNode) {
    StaticDebugger.printDebugInformation(this); // added dynamically
  ...
  }

}

after inserting 4, 2, 213, 31, calling insert(new BinaryNode(12)) outputs:

------------------------
BinaryTree@1e4cbc4 {
  BinaryNode root = BinaryNode@1df073d {
    int data = 4
    BinaryNode leftNode = BinaryNode@b66cc {
      int data = 2
      BinaryNode leftNode = null
      BinaryNode rightNode = null
    }
    BinaryNode rightNode = BinaryNode@13caecd {
      int data = 213
      BinaryNode leftNode = BinaryNode@f84386 {
        int data = 31
        BinaryNode leftNode = null
        BinaryNode rightNode = null
      }
      BinaryNode rightNode = null
    }
  }
}