diff --git a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/javaagent/Premain.java b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/javaagent/Premain.java
index e286992..d4546a5 100644
--- a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/javaagent/Premain.java
+++ b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/javaagent/Premain.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.launching.internal.javaagent;
 
+import java.io.InputStream;
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.IllegalClassFormatException;
 import java.lang.instrument.Instrumentation;
@@ -18,12 +19,33 @@
 import java.security.ProtectionDomain;
 
 import org.eclipse.jdt.launching.internal.weaving.ClassfileTransformer;
+import org.objectweb.asm.ClassReader;
 
 public class Premain {
 	private static final ClassfileTransformer transformer = new ClassfileTransformer();
 
-	public static void premain(@SuppressWarnings("unused") String agentArgs, Instrumentation inst) {
-		// System.err.println("Advanced source lookup support loaded."); //$NON-NLS-1$
+	public static void premain(final String agentArgs, final Instrumentation inst) {
+		final boolean debuglog = "debuglog".equals(agentArgs); //$NON-NLS-1$
+
+		// disable instrumentation if ASM is not able to read Object.class definition
+		try {
+			InputStream is = ClassLoader.getSystemResourceAsStream("java/lang/Object.class"); //$NON-NLS-1$
+			try {
+				new ClassReader(is);
+			}
+			finally {
+				is.close();
+			}
+		}
+		catch (Exception e) {
+			String vendor = System.getProperty("java.vendor"); //$NON-NLS-1$
+			String version = System.getProperty("java.version"); //$NON-NLS-1$
+			System.err.printf("JRE %s/%s is not supported, advanced source lookup disabled: %s.\n", vendor, version, e.getMessage()); //$NON-NLS-1$
+			if (debuglog) {
+				e.printStackTrace(System.err);
+			}
+			return;
+		}
 
 		inst.addTransformer(new ClassFileTransformer() {
 			public byte[] transform(ClassLoader loader, final String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
@@ -51,11 +73,17 @@
 					return transformer.transform(classfileBuffer, location);
 				}
 				catch (Exception e) {
-					System.err.print("Could not instrument class " + className + ": "); //$NON-NLS-1$ //$NON-NLS-2$
-					e.printStackTrace(System.err);
+					System.err.printf("Could not instrument class %s: %s.\n", className, e.getMessage()); //$NON-NLS-1$
+					if (debuglog) {
+						e.printStackTrace(System.err);
+					}
 				}
 				return null;
 			}
 		});
+
+		if (debuglog) {
+			System.err.println("Advanced source lookup enabled."); //$NON-NLS-1$
+		}
 	}
 }
diff --git a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
index 43df9bf..fc80401 100644
--- a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
+++ b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
Binary files differ
