no.disassemble
no.disassemble copied to clipboard
Unable to run with Graal
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
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?
@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.