我在做Java字節碼分析。我想跟蹤每個局部變量的狀態變化。這個想法非常像一個調試器。例如,我有一個像使用ASM 5.0的字節碼檢測。注入跟蹤器以跟蹤局部變量
public class Foo {
public void main() {
printOne();
}
public void printOne() {
int i=11110;
String hello="hello";
}
一個Java源代碼,通過使用ASM 5.0我可以訪問行號,本地變量名,mehtod名字,VAR指令等。訪客看起來像下面
@Override
public void visitLineNumber(int line, Label start) {
System.out.println("line: "+line+" ");
mv.visitLineNumber(line, start);
}
@Override
public void visitLocalVariable(String name, String desc,String signature, Label start, Label end, int index) {
System.out.println("local variable:"+name);
mv.visitLocalVariable(name, desc, signature, start, end, index);
}
@Override
public void visitVarInsn(int opcode, int var) {
System.out.println("var instruction"+Integer.toHexString(opcode));
mv.visitVarInsn(opcode, var);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
System.out.println("method");
mv.visitMethodInsn(opcode, owner, name, desc, itf);
}
的問題是我在哪裏注入示蹤劑(只是一個靜態方法調用),並尋找變量值的堆棧,並傳遞到示蹤劑參數?
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "path/to/Tracer", "trace", "(Ljava/lang/String;)V",false);
你有沒有試過尋找現有的調試工具? – Antimony
@銻是的,但我想自己實現一個調試器。 –