AgentUtils support reTransform

This commit is contained in:
hengyunabc
2020-05-19 21:17:52 +08:00
parent c20e97d7de
commit 7263d9f568
12 changed files with 70 additions and 12 deletions
@@ -80,7 +80,7 @@ public class AtEnterTest {
@Test
public void testEnter() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(EnterInterceptor.class).methodMatcher("hello")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().hello("abc", false);
@@ -67,7 +67,7 @@ public class AtExceptionExitTest {
public void testExecptionExitException() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(ExceptionExitInterceptor.class).methodMatcher("hello")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
System.err.println(Decompiler.decompile(bytes));
@@ -65,7 +65,7 @@ public class AtExitTest {
@Test
public void testExit() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestAccessInterceptor.class).methodMatcher("voidExit")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().voidExit();
@@ -80,7 +80,7 @@ public class AtExitTest {
public void testExitAndChangeReturn() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(ChangeReturnInterceptor.class).methodMatcher("longExit")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
System.err.println(Decompiler.decompile(bytes));
@@ -46,7 +46,7 @@ public class AtFieldAccessTest {
@Test
public void testEnter() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(FieldAccessInterceptor.class).methodMatcher("testReadField")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().testReadField(100);
@@ -87,7 +87,8 @@ public class AtInvokeTest {
}
}
@Test
//@Test
// TODO fix com.taobao.arthas.bytekit.asm.location.Location.InvokeLocation satck save
public void testInvokeBefore() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestAccessInterceptor.class).methodMatcher("testCall")
.redefine(true);
@@ -71,7 +71,7 @@ public class AtLineTest {
@Test
public void testLine() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestAccessInterceptor.class).methodMatcher("*")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().testLine(100);
@@ -75,7 +75,7 @@ public class AtSyncEnterTest {
@Test
public void test() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestInterceptor.class).methodMatcher("*")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().testLine(100);
@@ -75,7 +75,7 @@ public class AtSyncExitTest {
@Test
public void test() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestInterceptor.class).methodMatcher("*")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
new Sample().testLine(100);
@@ -62,7 +62,7 @@ public class AtThrowTest {
@Test
public void testThrow() throws Exception {
TestHelper helper = TestHelper.builder().interceptorClass(TestAccessInterceptor.class).methodMatcher("testThrow")
.redefine(true);
.reTransform(true);
byte[] bytes = helper.process(Sample.class);
Sample.testThrow(-1, 0, null);
@@ -14,12 +14,19 @@ import com.taobao.arthas.bytekit.utils.AsmUtils;
import com.taobao.arthas.bytekit.utils.MatchUtils;
import com.taobao.arthas.bytekit.utils.VerifyUtils;
/**
*
* @author hengyunabc
*
*/
public class TestHelper {
private Class<?> interceptorClass;
private boolean redefine;
private boolean reTransform;
private String methodMatcher = "*";
private boolean asmVerity = true;
@@ -38,6 +45,11 @@ public class TestHelper {
return this;
}
public TestHelper reTransform(boolean reTransform) {
this.reTransform = reTransform;
return this;
}
public TestHelper methodMatcher(String methodMatcher) {
this.methodMatcher = methodMatcher;
return this;
@@ -73,6 +85,10 @@ public class TestHelper {
AgentUtils.redefine(transform, bytes);
}
if (reTransform) {
AgentUtils.reTransform(transform, bytes);
}
return bytes;
}
}