no.disassemble icon indicating copy to clipboard operation
no.disassemble copied to clipboard

Unable to run with Graal

Open quoll opened this issue 4 years ago • 2 comments

I don't know if this is a Graal issue or a Java 11 issue. Loading no.disassemble and running results in the following:

=> (n/disassemble (fn []))
java.lang.NullPointerException
	at org.eclipse.jdt.internal.core.util.ClassFileStruct.u4At(ClassFileStruct.java:61)
	at org.eclipse.jdt.internal.core.util.ClassFileReader.<init>(ClassFileReader.java:76)
	at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:239)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:167)
	at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:102)
	at no.disassemble$disassemble_str.invokeStatic(disassemble.clj:25)
	at no.disassemble$disassemble_str.invoke(disassemble.clj:20)
	at diss.core$eval1786.invokeStatic(form-init14516279098776901002.clj:1)
	at diss.core$eval1786.invoke(form-init14516279098776901002.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:7176)
	at clojure.lang.Compiler.eval(Compiler.java:7131)
	at clojure.core$eval.invokeStatic(core.clj:3214)
	at clojure.core$eval.invoke(core.clj:3210)
	at clojure.main$repl$read_eval_print__9068$fn__9071.invoke(main.clj:414)
	at clojure.main$repl$read_eval_print__9068.invoke(main.clj:414)
	at clojure.main$repl$fn__9077.invoke(main.clj:435)
	at clojure.main$repl.invokeStatic(main.clj:435)
	at clojure.main$repl.doInvoke(main.clj:345)
	at clojure.lang.RestFn.invoke(RestFn.java:1523)
	at nrepl.middleware.interruptible_eval$evaluate.invokeStatic(interruptible_eval.clj:79)
	at nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:55)
	at nrepl.middleware.interruptible_eval$interruptible_eval$fn__943$fn__947.invoke(interruptible_eval.clj:142)
	at clojure.lang.AFn.run(AFn.java:22)
	at nrepl.middleware.session$session_exec$main_loop__1044$fn__1048.invoke(session.clj:171)
	at nrepl.middleware.session$session_exec$main_loop__1044.invoke(session.clj:170)
	at clojure.lang.AFn.run(AFn.java:22)
	at java.base/java.lang.Thread.run(Thread.java:834)
Execution error (ClassFormatException) at org.eclipse.jdt.internal.core.util.ClassFileReader/<init> (ClassFileReader.java:282).
null

quoll avatar May 27 '20 18:05 quoll

Oh boy. I guess I haven't been following JVM specifics for quite a while, but I remember there being some issues with restrictions on reflection and modules that might confound what this tool is trying to do, which is a clear hack around intercepting bytecode as it loads. Perhaps there's a JVM flag that needs to be set before it can work?

gtrak avatar May 27 '20 18:05 gtrak

@quoll Are you running it with lein-nodisassemble or directly? I was getting the same exact error on Java 11 when using no.disassemble directly, but adding -javaagent:%full-path-to-no.disassemble-jar% fixed that.

p-himik avatar Sep 08 '20 11:09 p-himik