From e744dc7df42c347b2b3cc9faf0a60f2a9fbe1d2e Mon Sep 17 00:00:00 2001 From: Clisprail Date: Fri, 18 Apr 2014 17:15:45 +0200 Subject: [PATCH] DebugAdapter --- parabotv2/src/org/parabot/core/Core.java | 4 +++ .../core/asm/adapters/AddDebugAdapter.java | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java diff --git a/parabotv2/src/org/parabot/core/Core.java b/parabotv2/src/org/parabot/core/Core.java index 6bed9d8..58b2482 100644 --- a/parabotv2/src/org/parabot/core/Core.java +++ b/parabotv2/src/org/parabot/core/Core.java @@ -114,4 +114,8 @@ public class Core { Core.verbose("Updates available..."); return false; } + + public static void debug(int i) { + System.out.println("DEBUG: " + i); + } } \ No newline at end of file diff --git a/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java b/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java new file mode 100644 index 0000000..ff177a9 --- /dev/null +++ b/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java @@ -0,0 +1,33 @@ +package org.parabot.core.asm.adapters; + +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; + +public class AddDebugAdapter { + private MethodNode mn; + + public AddDebugAdapter(MethodNode mn) { + this.mn = mn; + } + + public void inject() { + + int i = 20; + for(AbstractInsnNode node : mn.instructions.toArray().clone()) { + if(node.getType() == AbstractInsnNode.METHOD_INSN || node.getOpcode() == Opcodes.PUTFIELD || node.getOpcode() == Opcodes.ASTORE || node.getOpcode() == Opcodes.ISTORE) { + i++; + InsnList inject = new InsnList(); + inject.add(new IntInsnNode(Opcodes.BIPUSH, i)); + inject.add(new MethodInsnNode(Opcodes.INVOKESTATIC, + "org/parabot/core/Core", "debug", + "(I)V")); + mn.instructions.insertBefore(node.getNext(), inject); + } + } + } + +}