Skip to content

Commit cbf9869

Browse files
dkimitsaTom-Ski
andauthored
* fixed: debugger crash Cannot read the array length because "interfaces" is null (#816)
``` java.lang.NullPointerException: Cannot read the array length because "interfaces" is null at org.robovm.debugger.jdwp.handlers.referencetype.JdwpRefTypeInterfacesHandler.handle(JdwpRefTypeInterfacesHandler.java:49) at org.robovm.debugger.jdwp.JdwpDebugServer.doSocketWork(JdwpDebugServer.java:200) at java.base/java.lang.Thread.run(Thread.java:1583) at org.robovm.debugger.utils.DebuggerThread.run(DebuggerThread.java:42) ``` ## Root case: debugger queries interface information for classes that are marked as `ClassStatus.ERROR`. > java8/util/DelegatingSpliterator$ConsumerDelegate has error 1 due java.util.function.Consumer and > Class was Warning: java.util.function.Consumer is a phantom class! ## the fix: initialize fields with empty arrays. ## other changes: - using 10 threads for maven builds - printing line numbers in stacktraces in debug output Co-authored-by: Tomski <[email protected]>
1 parent 1536040 commit cbf9869

File tree

3 files changed

+6
-2
lines changed

3 files changed

+6
-2
lines changed

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22
set -e
3-
mvn clean install
3+
mvn -T 10 clean install
44
./plugins/idea/gradlew -b plugins/idea/build.gradle clean buildPlugin
55
mvn -f plugins/eclipse/pom.xml clean install
66
./plugins/gradle/gradlew -b plugins/gradle/build.gradle clean assemble validatePlugins publishToMavenLocal

compiler/vm/core/src/exception.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void rvmThrow(Env* env, Object* e) {
8888
jint index = 0;
8989
while ((frame = rvmGetNextCallStackMethod(env, callStack, &index)) != NULL) {
9090
Method* m = frame->method;
91-
TRACEF(" %s.%s%s", m->clazz->name, m->name, m->desc);
91+
TRACEF(" %s.%s%s:%d", m->clazz->name, m->name, m->desc, frame->lineNumber);
9292
}
9393
}
9494
}

plugins/debugger/src/main/java/org/robovm/debugger/state/classdata/ClassInfoImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ void readClassInfoHeader(DataBufferReader reader) {
100100
// errorMessage = reader.readStringZ(ptr);
101101
// }
102102
// System.out.println("!Class " + className + " has error " + errorType + " due " + errorMessage);
103+
// debugger might ask this info even if class reported as ClassStatus.ERROR
104+
interfaces = new ClassInfo[0];
105+
fields = new FieldInfo[0];
106+
methods = new MethodInfo[0];
103107
return;
104108
}
105109

0 commit comments

Comments
 (0)