public static void main(final String[] args) throws Exception {
    if (args.length != 1) {
      System.err.println("Usage: java com.sun.btrace.runtime.ErrorReturnInstrumentor <class>");
      System.exit(1);
    }

    args[0] = args[0].replace('.', '/');
    FileInputStream fis = new FileInputStream(args[0] + ".class");
    ClassReader reader = new ClassReader(new BufferedInputStream(fis));
    FileOutputStream fos = new FileOutputStream(args[0] + ".class");
    ClassWriter writer = InstrumentUtils.newClassWriter();
    InstrumentUtils.accept(
        reader,
        new ClassVisitor(Opcodes.ASM4, writer) {
          public MethodVisitor visitMethod(
              int access, String name, String desc, String signature, String[] exceptions) {
            MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
            return new ErrorReturnInstrumentor(mv, null, args[0], args[0], access, name, desc);
          }
        });
    fos.write(writer.toByteArray());
  }
  public static void main(String[] args) throws Exception {
    if (args.length != 1) {
      System.err.println("Usage: java com.sun.btrace.runtime.RunnableGenartor <class>");
      System.exit(1);
    }

    Class clazz = Class.forName(args[0]);
    Method[] methods = clazz.getDeclaredMethods();
    for (Method method : methods) {
      int modifiers = method.getModifiers();
      int index = 0;
      RunnableGenerator gen = new RunnableGeneratorImpl();
      if (Modifier.isStatic(modifiers)
          || Modifier.isPublic(modifiers)
          || method.getParameterTypes().length == 0) {
        try {
          final String className = "Runnable$" + index;
          final byte[] bytes = gen.generate(method, className);
          ClassLoader loader =
              new ClassLoader() {
                public Class findClass(String name) throws ClassNotFoundException {
                  if (name.equals(className)) {
                    return defineClass(className, bytes, 0, bytes.length);
                  }
                  throw new ClassNotFoundException(name);
                }
              };
          Runnable r = (Runnable) loader.loadClass(className).newInstance();
          new Thread(r).start();
        } catch (Exception exp) {
          exp.printStackTrace();
        }
      }
      index++;
    }
  }