From 47a80e97b62895bad9112146d4f2b7d315fb3c67 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 18 Nov 2013 17:17:41 +0100 Subject: [PATCH] catch unexpected exception --- .../debugger/jdi/VirtualMachineProxyImpl.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java index 345637ba9efd..55ad817e843c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java @@ -98,9 +98,21 @@ public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy { public List nestedTypes(ReferenceType refType) { List nestedTypes = myNestedClassesCache.get(refType); if (nestedTypes == null) { - final List list = refType.nestedTypes(); - final int size = list.size(); - if (size > 0) { + List list = Collections.emptyList(); + try { + list = refType.nestedTypes(); + } + catch (Throwable e) { + // sometimes some strange errors are thrown from JDI. Do not crash debugger because of this. + // Example: + //java.lang.StringIndexOutOfBoundsException: String index out of range: 487700285 + // at java.lang.String.checkBounds(String.java:375) + // at java.lang.String.(String.java:415) + // at com.sun.tools.jdi.PacketStream.readString(PacketStream.java:392) + // at com.sun.tools.jdi.JDWP$VirtualMachine$AllClassesWithGeneric$ClassInfo.(JDWP.java:1644) + LOG.info(e); + } + if (!list.isEmpty()) { final Set candidates = new HashSet(); final ClassLoaderReference outerLoader = refType.classLoader(); for (ReferenceType nested : list) {