workaround for jdi hang in trace mode
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 4 Jun 2015 17:30:16 +0000 (20:30 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 4 Jun 2015 17:31:08 +0000 (20:31 +0300)
java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java

index f08221c88e31da45df37ae08d0a215b1b08215ba..52d9ab2ed75168fcd5fca1ef9bc64110d682507f 100644 (file)
@@ -262,6 +262,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
     return classRenderer;
   }
 
+  private static final String ourTrace = System.getProperty("idea.debugger.trace");
 
   @SuppressWarnings({"HardCodedStringLiteral"})
   protected void commitVM(VirtualMachine vm) {
@@ -277,10 +278,9 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
 
     myVirtualMachineProxy = new VirtualMachineProxyImpl(this, vm);
 
-    String trace = System.getProperty("idea.debugger.trace");
-    if (trace != null) {
+    if (!StringUtil.isEmpty(ourTrace)) {
       int mask = 0;
-      StringTokenizer tokenizer = new StringTokenizer(trace);
+      StringTokenizer tokenizer = new StringTokenizer(ourTrace);
       while (tokenizer.hasMoreTokens()) {
         String token = tokenizer.nextToken();
         if ("SENDS".compareToIgnoreCase(token) == 0) {
@@ -1081,6 +1081,15 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
                   }
                 }
               }
+
+              // workaround for jdi hang in trace mode
+              if (!StringUtil.isEmpty(ourTrace)) {
+                for (Object arg : myArgs) {
+                  //noinspection ResultOfMethodCallIgnored
+                  arg.toString();
+                }
+              }
+
               result[0] = invokeMethod(invokePolicy, myMethod, myArgs);
             }
             finally {