我想通過字節碼修改使用asm
字節碼檢測庫加載一些對象。ASM不在類轉換中加載對象,但通常轉換工作正常
我正在使用retransformClasses()
方法重新轉換類。
我加載這樣的對象:
super.visitVarInsn(Opcodes.ALOAD, 0);
super.visitFieldInsn(Opcodes.GETFIELD, owner, name, desc);
super.visitMethodInsn(org.objectweb.asm.Opcodes.INVOKESTATIC,
"com/coolcoder/MyClass",
"objectCheckTest",
"(Ljava/lang/Object;)V");`
的問題是,我的對象越來越使用ClassTransformer
通常tranform()
加載,但是當我使用Attach API
的retranformClasses()
,這些對象都沒有正在加載。奇怪的是,我也沒有收到任何字節碼錯誤。
我做錯了什麼?還是我錯過了一些關於retransform
的複雜部分?
確實是實際執行的轉型?即你可以添加一些調試輸出或其他東西來確保? –
@AndreyBreslav:是的,轉型正在執行中。我在objectCheckTest()中添加了一些調試語句來驗證這一點,並且它們正在執行。 – DukeLover
@AndreyBreslav:我認爲問題在於'redefination'。儘管我無法完全理解這個問題,但是我可以看到我正在執行這些字節碼修改的類,正在獲取'redefined'。對此有何想法? – DukeLover