diff --git a/TracerOnJavassist/src/tracer/JSONArrayAdvisor.java b/TracerOnJavassist/src/tracer/JSONArrayAdvisor.java index 3608896..8bcbe47 100644 --- a/TracerOnJavassist/src/tracer/JSONArrayAdvisor.java +++ b/TracerOnJavassist/src/tracer/JSONArrayAdvisor.java @@ -116,7 +116,8 @@ public static void arrayWriteObject(Object array, int index, Object value) { long threadId = Thread.currentThread().getId(); long timeStamp = System.nanoTime(); - JSONTraceGenerator.arraySetOutput(array.getClass().getName(), Integer.toString(System.identityHashCode(array)), index, value.getClass().getName(), Integer.toString(System.identityHashCode(value)), threadId, timeStamp); + JSONTraceGenerator.arraySetOutput(array.getClass().getName(), Integer.toString(System.identityHashCode(array)), index, + ((value !=null)?value.getClass().getName():"---"), ((value != null)?Integer.toString(System.identityHashCode(value)):"0"), threadId, timeStamp); ((Object [])array)[index] = value; } @@ -124,7 +125,8 @@ Object value = ((Object [])array)[index]; long threadId = Thread.currentThread().getId(); long timeStamp = System.nanoTime(); - JSONTraceGenerator.arrayGetOutput(array.getClass().getName(), Integer.toString(System.identityHashCode(array)), index, value.getClass().getName(), Integer.toString(System.identityHashCode(value)), threadId, timeStamp); + JSONTraceGenerator.arrayGetOutput(array.getClass().getName(), Integer.toString(System.identityHashCode(array)), index, + ((value !=null)?value.getClass().getName():"---"), ((value != null)?Integer.toString(System.identityHashCode(value)):"0"), threadId, timeStamp); return value; } } diff --git a/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java b/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java index 12ef3d2..4f28a5c 100644 --- a/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java +++ b/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java @@ -169,8 +169,8 @@ ArrayList argObjects = new ArrayList<>(); for (CtClass c : parameterClasses) { if (!c.isPrimitive()) { - argClasses.add("($" + (p + 1) + ").getClass().getName()"); - argObjects.add("System.identityHashCode($" + (p + 1) + ")"); + argClasses.add("(($" + (p + 1) + " != null)?($" + (p + 1) + ").getClass().getName():\"" + c.getName() + "\")"); + argObjects.add("(($" + (p + 1) + " != null)?System.identityHashCode($" + (p + 1) + "):0)"); } else { argClasses.add("\"" + c.getName() + "\""); // ��{�^�̏ꍇ�AgetClass()�ł��Ȃ����� argObjects.add("$" + (p + 1)); diff --git a/TracerOnJavassist/src/tracer/Tracer.java b/TracerOnJavassist/src/tracer/Tracer.java index 6ac42b5..bbbf256 100644 --- a/TracerOnJavassist/src/tracer/Tracer.java +++ b/TracerOnJavassist/src/tracer/Tracer.java @@ -144,7 +144,11 @@ for (final CtMethod m : cc.getDeclaredMethods()) { methodInstrumentation(cc, m); } - cc.instrument(conv); + try { + cc.instrument(conv); + } catch (CannotCompileException e) { + e.printStackTrace(); + } if (classPath != null) { if (classPath.endsWith("/")) { classPath = classPath.substring(0, classPath.length() - 1); @@ -165,6 +169,9 @@ classInitializer = cc.makeClassInitializer(); } classInitializer.insertBefore(outputStatementsGenerator.generateInsertBeforeStatementsForClassDefinition(cc, classInitializer)); + if (classInitializer.getMethodInfo().getCodeAttribute() != null) { + classInitializer.getMethodInfo().getCodeAttribute().computeMaxStack(); // ���ꂪ�Ȃ��ƁA���s���� java.lang.VerifyError: Stack map does not match the one at exception handler... �ŗ����� + } } private static void methodInstrumentation(final CtClass cc, final CtBehavior m) throws BadBytecode, NotFoundException, CannotCompileException {