< prev index next >

src/hotspot/share/prims/jvmtiExport.cpp

Print this page

        

@@ -2473,11 +2473,11 @@
   typedef jint (JNICALL *OnAttachEntry_t)(JavaVM*, char *, void *);
 }
 
 jint JvmtiExport::load_agent_library(const char *agent, const char *absParam,
                                      const char *options, outputStream* st) {
-  char ebuf[1024];
+  char ebuf[1024] = {0};
   char buffer[JVM_MAXPATHLEN];
   void* library = NULL;
   jint result = JNI_ERR;
   const char *on_attach_symbols[] = AGENT_ONATTACH_SYMBOLS;
   size_t num_symbol_entries = ARRAY_SIZE(on_attach_symbols);

@@ -2523,10 +2523,12 @@
     if (on_attach_entry == NULL) {
       // Agent_OnAttach missing - unload library
       if (!agent_lib->is_static_lib()) {
         os::dll_unload(library);
       }
+      st->print_cr("%s is not available in %s",
+                   on_attach_symbols[0], agent_lib->name());
       delete agent_lib;
     } else {
       // Invoke the Agent_OnAttach function
       JavaThread* THREAD = JavaThread::current();
       {

@@ -2537,10 +2539,12 @@
         result = (*on_attach_entry)(&main_vm, (char*)options, NULL);
       }
 
       // Agent_OnAttach may have used JNI
       if (HAS_PENDING_EXCEPTION) {
+        java_lang_Throwable::print(PENDING_EXCEPTION, st);
+        st->cr();
         CLEAR_PENDING_EXCEPTION;
       }
 
       // If OnAttach returns JNI_OK then we add it to the list of
       // agent libraries so that we can call Agent_OnUnload later.

@@ -2548,15 +2552,20 @@
         Arguments::add_loaded_agent(agent_lib);
       } else {
         delete agent_lib;
       }
 
-      // Agent_OnAttach executed so completion status is JNI_OK
-      st->print_cr("%d", result);
+      st->print_cr("return code: %d", result);
       result = JNI_OK;
     }
+  } else {
+    st->print_cr("%s was not loaded.", agent);
+    if (*ebuf != '\0') {
+      st->print_cr("%s", ebuf);
+    }
   }
+
   return result;
 }
 
 #endif // INCLUDE_SERVICES
 ////////////////////////////////////////////////////////////////////////////////////////////////
< prev index next >