・従来のフォーマットで空のメソッド本体を処理できなくなってしまっていた。(挿入する出力文を{}で囲まないようにしてしまったため。)
・Threadのメソッド呼び出しで、検出を除外するメソッドを指定するロジックが間違っていた。
・threadSampleのテスト結果が間違っていたので、正しいものに置き換える。
1 parent 4f19049 commit bde8a4e546d874423ec2586e341ef8a2fcf8ac0e
n-nitta authored on 27 Oct 2017
Showing 3 changed files
View
10
TracerOnJavassist/src/tracer/OutputStatementsGenerator.java
return generator.generateReplaceStatementsForNewArray(arrayClass, arrayObject, dimension, threadId, timeStamp);
}
public String generateReplaceStatementsForCall(CtClass cls, CtBehavior m) throws NotFoundException {
return generateInsertBeforeStatements(cls, m, true) + " $_ = $proceed($$); " + generateInsertAfterStatements(cls, m, true);
}
return "{" + generateInsertBeforeStatements(cls, m, true) + " $_ = $proceed($$); " + generateInsertAfterStatements(cls, m, true) + "}";
}
public String generateInsertBeforeStatementsForMethodBody(CtClass cls, CtBehavior m) throws NotFoundException {
return generateInsertBeforeStatements(cls, m, false);
}
return "{" + generateInsertBeforeStatements(cls, m, false) + "}";
}
public String generateInsertAfterStatementsForMethodBody(CtClass cls, CtBehavior m) throws NotFoundException {
return generateInsertAfterStatements(cls, m, false);
return "{" + generateInsertAfterStatements(cls, m, false) + "}";
}
/**
* トレース出力用の命令列を生成する
View
4
TracerOnJavassist/src/tracer/Tracer.java
public class Tracer {
public static int lineNo = 1;
private static final String STANDARD_CLASSES = "java.util.ListIterator|java.util.Iterator|java.util.List|java.util.Vector|java.util.ArrayList|java.util.Stack|java.util.Map|java.util.HashMap|java.util.Set|java.util.HashSet|java.util.Hashtable|java.util.LinkedList|java.lang.Thread";
private static final String CONCRETE_STANDARD_CLASSES = "java.util.Vector|java.util.ArrayList|java.util.Stack |java.util.HashMap|java.util.HashSet|java.util.Hashtable|java.util.LinkedList|java.lang.Thread";
private static final String EXCEPT_FOR_METHODS = "java.lang.Thread.currentThread()|java.lang.Thread.getId()";
private static final String EXCEPT_FOR_METHODS = "java.lang.Thread.currentThread..|java.lang.Thread.getId..";
private static OutputStatementsGenerator outputStatementsGenerator = null;
private static CodeConverter conv = new CodeConverter();
 
public static void main(String[] args) {
}
public void edit(MethodCall c) throws CannotCompileException {
try {
CtMethod m = c.getMethod();
if (m.getDeclaringClass().getName().matches(STANDARD_CLASSES) && m.getLongName().matches(EXCEPT_FOR_METHODS)) {
if (m.getDeclaringClass().getName().matches(STANDARD_CLASSES) && !m.getLongName().matches(EXCEPT_FOR_METHODS)) {
c.replace(outputStatementsGenerator.generateReplaceStatementsForCall(m.getDeclaringClass(), m));
}
} catch (NotFoundException e) {
e.printStackTrace();
View
102
TracerOnJavassist/traces/_threadSample.txt
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":24137403},"index":0,"value":{"class":"[Ljava.lang.String;","id":1950406585}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":24137403},"index":0,"value":{"class":"[Ljava.lang.String;","id":1950406585}},
{"type":"methodEntry","signature":"public static void threadSample.Main.main(java.lang.String[])","receiver":{"class":"threadSample.Main","id":0},"args":[{"class":"[Ljava.lang.String;","id":1950406585}],"threadId":1,"time":1359366782302740},
{"type":"blockEntry","methodSignature":"threadSample.Main.main(java.lang.String[])","blockId":0,"incomings":0,"threadId":1,"time":1359366782322059},
{"type":"constructorEntry","signature":"public threadSample.ThreadSample()","class":"threadSample.ThreadSample","args":[],"threadId":1,"time":1359366782483554},
{"type":"constructorExit","shortSignature":"threadSample.ThreadSample()","returnValue":{"class":"threadSample.ThreadSample","id":17024288},"threadId":1,"time":1359366782526117},
{"type":"methodExit","shortSignature":"threadSample.Main.main(java.lang.String[])","receiver":{"class":"threadSample.Main","id":0},"returnValue":{"class":"void","id":0},"threadId":1,"time":1359366782635994},
{"type":"methodEntry","signature":"public void threadSample.ThreadSample.run()","receiver":{"class":"threadSample.ThreadSample","id":17024288},"args":[],"threadId":10,"time":1359366782747984},
{"type":"blockEntry","methodSignature":"threadSample.ThreadSample.run()","blockId":0,"incomings":0,"threadId":10,"time":1359366782766700},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1954210149},"index":0,"value":{"class":"threadSample.ThreadSample","id":17024288}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1954210149},"index":0,"value":{"class":"threadSample.ThreadSample","id":17024288}},
{"type":"constructorEntry","signature":"threadSample.ThreadSample.1(threadSample.ThreadSample)","class":"threadSample.ThreadSample$1","args":[{"class":"threadSample.ThreadSample","id":17024288}],"threadId":10,"time":1359366783687376},
{"type":"constructorExit","shortSignature":"threadSample.ThreadSample.1(threadSample.ThreadSample)","returnValue":{"class":"threadSample.ThreadSample$1","id":795077025},"threadId":10,"time":1359366783712128},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1216307541},"index":0,"value":{"class":"threadSample.ThreadSample$1","id":795077025}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1216307541},"index":0,"value":{"class":"threadSample.ThreadSample$1","id":795077025}},
{"type":"constructorEntry","signature":"public java.lang.Thread(java.lang.Runnable)","class":"java.lang.Thread","args":[{"class":"threadSample.ThreadSample$1","id":795077025}],"threadId":10,"time":1359366783832571},
{"type":"constructorExit","shortSignature":"java.lang.Thread(java.lang.Runnable)","returnValue":{"class":"java.lang.Thread","id":584005794},"threadId":10,"time":1359366783863662},
{"type":"methodExit","shortSignature":"threadSample.ThreadSample.run()","receiver":{"class":"threadSample.ThreadSample","id":17024288},"returnValue":{"class":"void","id":0},"threadId":10,"time":1359366783959050},
{"type":"methodEntry","signature":"public void threadSample.ThreadSample.1.run()","receiver":{"class":"threadSample.ThreadSample$1","id":795077025},"args":[],"threadId":12,"time":1359366784048703},
{"type":"blockEntry","methodSignature":"threadSample.ThreadSample.1.run()","blockId":0,"incomings":0,"threadId":12,"time":1359366784061683},
{"type":"constructorEntry","signature":"public threadSample.A()","class":"threadSample.A","args":[],"threadId":12,"time":1359366784821165},
{"type":"constructorEntry","signature":"public threadSample.B()","class":"threadSample.B","args":[],"threadId":12,"time":1359366785600268},
{"type":"constructorEntry","signature":"public threadSample.C()","class":"threadSample.C","args":[],"threadId":12,"time":1359366786357335},
{"type":"constructorExit","shortSignature":"threadSample.C()","returnValue":{"class":"threadSample.C","id":1022253574},"threadId":12,"time":1359366786425556},
{"type":"fieldSet","fieldName":"threadSample.B.c","container":{"class":"threadSample.B","id":1146642218},"value":{"class":"threadSample.C","id":1022253574},"threadId":12,"time":1359366786480796},
{"type":"constructorExit","shortSignature":"threadSample.B()","returnValue":{"class":"threadSample.B","id":1146642218},"threadId":12,"time":1359366786504945},
{"type":"fieldSet","fieldName":"threadSample.A.b","container":{"class":"threadSample.A","id":97509748},"value":{"class":"threadSample.B","id":1146642218},"threadId":12,"time":1359366786562903},
{"type":"constructorEntry","signature":"public threadSample.D()","class":"threadSample.D","args":[],"threadId":12,"time":1359366787515274},
{"type":"constructorExit","shortSignature":"threadSample.D()","returnValue":{"class":"threadSample.D","id":752550817},"threadId":12,"time":1359366787570514},
{"type":"fieldSet","fieldName":"threadSample.A.d","container":{"class":"threadSample.A","id":97509748},"value":{"class":"threadSample.D","id":752550817},"threadId":12,"time":1359366787605530},
{"type":"constructorExit","shortSignature":"threadSample.A()","returnValue":{"class":"threadSample.A","id":97509748},"threadId":12,"time":1359366787628773},
{"type":"methodEntry","signature":"public void threadSample.A.m()","receiver":{"class":"threadSample.A","id":97509748},"args":[],"threadId":12,"time":1359366787663789},
{"type":"blockEntry","methodSignature":"threadSample.A.m()","blockId":0,"incomings":0,"threadId":12,"time":1359366787683410},
{"type":"fieldGet","fieldName":"threadSample.A.d","this":{"class":"threadSample.A","id":97509748},"container":{"class":"threadSample.A","id":97509748},"value":{"class":"threadSample.D","id":752550817},"threadId":12,"time":1359366787724463},
{"type":"fieldGet","fieldName":"threadSample.A.b","this":{"class":"threadSample.A","id":97509748},"container":{"class":"threadSample.A","id":97509748},"value":{"class":"threadSample.B","id":1146642218},"threadId":12,"time":1359366787763102},
{"type":"methodEntry","signature":"public threadSample.C threadSample.B.getC()","receiver":{"class":"threadSample.B","id":1146642218},"args":[],"threadId":12,"time":1359366787794193},
{"type":"blockEntry","methodSignature":"threadSample.B.getC()","blockId":0,"incomings":0,"threadId":12,"time":1359366787812909},
{"type":"fieldGet","fieldName":"threadSample.B.c","this":{"class":"threadSample.B","id":1146642218},"container":{"class":"threadSample.B","id":1146642218},"value":{"class":"threadSample.C","id":1022253574},"threadId":12,"time":1359366787848528},
{"type":"methodExit","shortSignature":"threadSample.B.getC()","receiver":{"class":"threadSample.B","id":1146642218},"returnValue":{"class":"threadSample.C","id":1022253574},"threadId":12,"time":1359366787880224},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1590384136},"index":0,"value":{"class":"threadSample.C","id":1022253574}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1590384136},"index":0,"value":{"class":"threadSample.C","id":1022253574}},
{"type":"methodEntry","signature":"public void threadSample.D.setC(threadSample.C)","receiver":{"class":"threadSample.D","id":752550817},"args":[{"class":"threadSample.C","id":1022253574}],"threadId":12,"time":1359366788057718},
{"type":"blockEntry","methodSignature":"threadSample.D.setC(threadSample.C)","blockId":0,"incomings":0,"threadId":12,"time":1359366788070396},
{"type":"fieldSet","fieldName":"threadSample.D.c","container":{"class":"threadSample.D","id":752550817},"value":{"class":"threadSample.C","id":1022253574},"threadId":12,"time":1359366788092130},
{"type":"methodExit","shortSignature":"threadSample.D.setC(threadSample.C)","receiver":{"class":"threadSample.D","id":752550817},"returnValue":{"class":"void","id":0},"threadId":12,"time":1359366788111147},
{"type":"methodExit","shortSignature":"threadSample.A.m()","receiver":{"class":"threadSample.A","id":97509748},"returnValue":{"class":"void","id":0},"threadId":12,"time":1359366788131070},
{"type":"methodExit","shortSignature":"threadSample.ThreadSample.1.run()","receiver":{"class":"threadSample.ThreadSample$1","id":795077025},"returnValue":{"class":"void","id":0},"threadId":12,"time":1359366788150993},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1293086287},"index":0,"value":{"class":"[Ljava.lang.String;","id":366717969}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1293086287},"index":0,"value":{"class":"[Ljava.lang.String;","id":366717969}},
{"type":"methodEntry","signature":"public static void threadSample.Main.main(java.lang.String[])","receiver":{"class":"threadSample.Main","id":0},"args":[{"class":"[Ljava.lang.String;","id":366717969}],"threadId":1,"time":1368740396939251},
{"type":"blockEntry","methodSignature":"threadSample.Main.main(java.lang.String[])","blockId":0,"incomings":0,"threadId":1,"time":1368740396973361},
{"type":"constructorEntry","signature":"public threadSample.ThreadSample()","class":"threadSample.ThreadSample","args":[],"threadId":1,"time":1368740397274920},
{"type":"constructorExit","shortSignature":"threadSample.ThreadSample()","returnValue":{"class":"threadSample.ThreadSample","id":404225673},"threadId":1,"time":1368740397348574},
{"type":"methodEntry","signature":"public synchronized void java.lang.Thread.start()","receiver":{"class":"threadSample.ThreadSample","id":404225673},"args":[],"threadId":1,"time":1368740397375742},
{"type":"methodExit","shortSignature":"java.lang.Thread.start()","receiver":{"class":"threadSample.ThreadSample","id":404225673},"returnValue":{"class":"void","id":0},"threadId":1,"time":1368740397510371},
{"type":"methodExit","shortSignature":"threadSample.Main.main(java.lang.String[])","receiver":{"class":"threadSample.Main","id":0},"returnValue":{"class":"void","id":0},"threadId":1,"time":1368740397533615},
{"type":"methodEntry","signature":"public void threadSample.ThreadSample.run()","receiver":{"class":"threadSample.ThreadSample","id":404225673},"args":[],"threadId":10,"time":1368740397627795},
{"type":"blockEntry","methodSignature":"threadSample.ThreadSample.run()","blockId":0,"incomings":0,"threadId":10,"time":1368740397654057},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1216307541},"index":0,"value":{"class":"threadSample.ThreadSample","id":404225673}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1216307541},"index":0,"value":{"class":"threadSample.ThreadSample","id":404225673}},
{"type":"constructorEntry","signature":"threadSample.ThreadSample.1(threadSample.ThreadSample)","class":"threadSample.ThreadSample$1","args":[{"class":"threadSample.ThreadSample","id":404225673}],"threadId":10,"time":1368740398858784},
{"type":"constructorExit","shortSignature":"threadSample.ThreadSample.1(threadSample.ThreadSample)","returnValue":{"class":"threadSample.ThreadSample$1","id":584005794},"threadId":10,"time":1368740398900441},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1385112968},"index":0,"value":{"class":"threadSample.ThreadSample$1","id":584005794}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1385112968},"index":0,"value":{"class":"threadSample.ThreadSample$1","id":584005794}},
{"type":"constructorEntry","signature":"public java.lang.Thread(java.lang.Runnable)","class":"java.lang.Thread","args":[{"class":"threadSample.ThreadSample$1","id":584005794}],"threadId":10,"time":1368740399055296},
{"type":"constructorExit","shortSignature":"java.lang.Thread(java.lang.Runnable)","returnValue":{"class":"java.lang.Thread","id":870919696},"threadId":10,"time":1368740399097858},
{"type":"methodEntry","signature":"public synchronized void java.lang.Thread.start()","receiver":{"class":"java.lang.Thread","id":870919696},"args":[],"threadId":10,"time":1368740399123516},
{"type":"methodExit","shortSignature":"java.lang.Thread.start()","receiver":{"class":"java.lang.Thread","id":870919696},"returnValue":{"class":"void","id":0},"threadId":10,"time":1368740399233997},
{"type":"methodExit","shortSignature":"threadSample.ThreadSample.run()","receiver":{"class":"threadSample.ThreadSample","id":404225673},"returnValue":{"class":"void","id":0},"threadId":10,"time":1368740399254222},
{"type":"methodEntry","signature":"public void threadSample.ThreadSample.1.run()","receiver":{"class":"threadSample.ThreadSample$1","id":584005794},"args":[],"threadId":12,"time":1368740399316707},
{"type":"blockEntry","methodSignature":"threadSample.ThreadSample.1.run()","blockId":0,"incomings":0,"threadId":12,"time":1368740399333008},
{"type":"constructorEntry","signature":"public threadSample.A()","class":"threadSample.A","args":[],"threadId":12,"time":1368740408055279},
{"type":"constructorEntry","signature":"public threadSample.B()","class":"threadSample.B","args":[],"threadId":12,"time":1368740415356691},
{"type":"constructorEntry","signature":"public threadSample.C()","class":"threadSample.C","args":[],"threadId":12,"time":1368740422299190},
{"type":"constructorExit","shortSignature":"threadSample.C()","returnValue":{"class":"threadSample.C","id":97509748},"threadId":12,"time":1368740422345676},
{"type":"fieldSet","fieldName":"threadSample.B.c","container":{"class":"threadSample.B","id":316311975},"value":{"class":"threadSample.C","id":97509748},"threadId":12,"time":1368740422380692},
{"type":"constructorExit","shortSignature":"threadSample.B()","returnValue":{"class":"threadSample.B","id":316311975},"threadId":12,"time":1368740422396691},
{"type":"fieldSet","fieldName":"threadSample.A.b","container":{"class":"threadSample.A","id":1233337500},"value":{"class":"threadSample.B","id":316311975},"threadId":12,"time":1368740422429594},
{"type":"constructorEntry","signature":"public threadSample.D()","class":"threadSample.D","args":[],"threadId":12,"time":1368740430485959},
{"type":"constructorExit","shortSignature":"threadSample.D()","returnValue":{"class":"threadSample.D","id":2004703190},"threadId":12,"time":1368740430527918},
{"type":"fieldSet","fieldName":"threadSample.A.d","container":{"class":"threadSample.A","id":1233337500},"value":{"class":"threadSample.D","id":2004703190},"threadId":12,"time":1368740430552067},
{"type":"constructorExit","shortSignature":"threadSample.A()","returnValue":{"class":"threadSample.A","id":1233337500},"threadId":12,"time":1368740430568971},
{"type":"methodEntry","signature":"public void threadSample.A.m()","receiver":{"class":"threadSample.A","id":1233337500},"args":[],"threadId":12,"time":1368740430588894},
{"type":"blockEntry","methodSignature":"threadSample.A.m()","blockId":0,"incomings":0,"threadId":12,"time":1368740430599761},
{"type":"fieldGet","fieldName":"threadSample.A.d","this":{"class":"threadSample.A","id":1233337500},"container":{"class":"threadSample.A","id":1233337500},"value":{"class":"threadSample.D","id":2004703190},"threadId":12,"time":1368740430623608},
{"type":"fieldGet","fieldName":"threadSample.A.b","this":{"class":"threadSample.A","id":1233337500},"container":{"class":"threadSample.A","id":1233337500},"value":{"class":"threadSample.B","id":316311975},"threadId":12,"time":1368740430645946},
{"type":"methodEntry","signature":"public threadSample.C threadSample.B.getC()","receiver":{"class":"threadSample.B","id":316311975},"args":[],"threadId":12,"time":1368740430665869},
{"type":"blockEntry","methodSignature":"threadSample.B.getC()","blockId":0,"incomings":0,"threadId":12,"time":1368740430677641},
{"type":"fieldGet","fieldName":"threadSample.B.c","this":{"class":"threadSample.B","id":316311975},"container":{"class":"threadSample.B","id":316311975},"value":{"class":"threadSample.C","id":97509748},"threadId":12,"time":1368740430699979},
{"type":"methodExit","shortSignature":"threadSample.B.getC()","receiver":{"class":"threadSample.B","id":316311975},"returnValue":{"class":"threadSample.C","id":97509748},"threadId":12,"time":1368740430719902},
{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1175576547},"index":0,"value":{"class":"threadSample.C","id":97509748}},
{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1175576547},"index":0,"value":{"class":"threadSample.C","id":97509748}},
{"type":"methodEntry","signature":"public void threadSample.D.setC(threadSample.C)","receiver":{"class":"threadSample.D","id":2004703190},"args":[{"class":"threadSample.C","id":97509748}],"threadId":12,"time":1368740430856645},
{"type":"blockEntry","methodSignature":"threadSample.D.setC(threadSample.C)","blockId":0,"incomings":0,"threadId":12,"time":1368740430869625},
{"type":"fieldSet","fieldName":"threadSample.D.c","container":{"class":"threadSample.D","id":2004703190},"value":{"class":"threadSample.C","id":97509748},"threadId":12,"time":1368740430890755},
{"type":"methodExit","shortSignature":"threadSample.D.setC(threadSample.C)","receiver":{"class":"threadSample.D","id":2004703190},"returnValue":{"class":"void","id":0},"threadId":12,"time":1368740430910074},
{"type":"methodExit","shortSignature":"threadSample.A.m()","receiver":{"class":"threadSample.A","id":1233337500},"returnValue":{"class":"void","id":0},"threadId":12,"time":1368740430930601},
{"type":"methodExit","shortSignature":"threadSample.ThreadSample.1.run()","receiver":{"class":"threadSample.ThreadSample$1","id":584005794},"returnValue":{"class":"void","id":0},"threadId":12,"time":1368740430952335},