Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 May 2008 16:40:56 -0700
From:      Greg Lewis <glewis@eyesbeyond.com>
To:        freebsd-java@freebsd.org
Subject:   Re: NetBeans 6.1 Profiler, Sun JDK 1.5/1.6
Message-ID:  <20080516234056.GB43930@misty.eyesbeyond.com>
In-Reply-To: <20080516121927.GA13485@office.redwerk.com>
References:  <20080516121927.GA13485@office.redwerk.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 16, 2008 at 03:19:27PM +0300, Eugeny N Dzhurinsky wrote:
> Hello everytbody!
> 
> I recently installed NetBeans 6.1 from ports and noticed there is no
> libprofilerinterface.so library for FreeBSD, and NetBeans complains the profiling 
> wouldn't work. I've downloaded the sources of NetBeans and was able to build the 
> libprofilerinterface.so from sources, once I placed it into the appropriate directory 
> NetBeans expects it to appear in - NetBeans stops reporting the error, however profiling 
> still doesn't work for some another reason - it just hands on the "calibration" stage.
> 
> I had built the module with -ggdb option, and found there is java.core file and 
> GDB shows this stack trace:
> 
> 
> =============================================================================
> (gdb) bt
> #0  0x2817f9fb in kill () from /lib/libc.so.6
> #1  0x280a3236 in raise () from /lib/libpthread.so.2
> #2  0x2817e6a8 in abort () from /lib/libc.so.6
> #3  0x2815a898 in __assert () from /lib/libc.so.6
> #4  0x28808fda in initializeJVMTI (jvm=0x287b6ae0) at
> ../src-jdk15/common_functions.c:122

So, in the code you included below, which is line 122?

> #5  0x2880911c in Agent_OnLoad (jvm=0x287b6ae0, options=0x0, reserved=0x0)
>     at ../src-jdk15/common_functions.c:147
> #6  0x286dfd3d in Threads::create_vm_init_agents ()
>        from /usr/local/jdk1.5.0/jre/lib/i386/server/libjvm.so
> #7  0x286e2b5f in Threads::create_vm () from
>        /usr/local/jdk1.5.0/jre/lib/i386/server/libjvm.so
> #8  0x284627a1 in JNI_CreateJavaVM () from
>        /usr/local/jdk1.5.0/jre/lib/i386/server/libjvm.so
> =============================================================================
> 
> the function initializeJVMTI dumped below:
> 
> =============================================================================
> void initializeJVMTI(JavaVM *jvm) {
>     jvmtiError err;
>     jvmtiCapabilities capas;
>     jint res;
> 
>     /* Obtain the JVMTI environment to be used by this agent */
> #ifdef JNI_VERSION_1_6
>     (*jvm)->GetEnv(jvm, (void**)&_jvmti, JVMTI_VERSION_1_1);
> #else
>     (*jvm)->GetEnv(jvm, (void**)&_jvmti, JVMTI_VERSION_1_0);
> #endif
> 
>     /* Enable runtime class redefinition capability */
>     err = (*_jvmti)->GetCapabilities(_jvmti, &capas);
>     assert(err == JVMTI_ERROR_NONE);
>     capas.can_redefine_classes = 1;
> #ifdef JNI_VERSION_1_6 
>     capas.can_retransform_classes = 1;
> #endif
>     capas.can_generate_garbage_collection_events = 1;
>     capas.can_generate_native_method_bind_events = 1;
>     capas.can_generate_monitor_events = 1;
>     capas.can_get_current_thread_cpu_time = 1;
>     capas.can_generate_vm_object_alloc_events = 1;
>     err = (*_jvmti)->AddCapabilities(_jvmti, &capas);
>     if (err != JVMTI_ERROR_NONE) {
>         fprintf(stderr, "Profiler Agent Error: Failed to obtain JVMTI capabilities, error code: %d\n", err);
>     }
> 
>     /* Zero out the callbacks data structure for future use*/
>     _jvmti_callbacks = &_jvmti_callbacks_static;
>     memset(_jvmti_callbacks, 0, sizeof(jvmtiEventCallbacks));
> 
>     /* Enable class load hook event, that captures class file bytes for classes loaded by non-system loaders */
>     _jvmti_callbacks->ClassFileLoadHook = class_file_load_hook;
>     _jvmti_callbacks->NativeMethodBind = native_method_bind_hook;
>     _jvmti_callbacks->MonitorContendedEnter = monitor_contended_enter_hook;
>     _jvmti_callbacks->MonitorContendedEntered = monitor_contended_entered_hook;
>     _jvmti_callbacks->VMObjectAlloc = vm_object_alloc;
>     res = (*_jvmti)->SetEventCallbacks(_jvmti, _jvmti_callbacks, sizeof(*_jvmti_callbacks));
>     assert (res == JVMTI_ERROR_NONE);
> 
>     res = (*_jvmti)->SetEventNotificationMode(_jvmti, JVMTI_ENABLE, JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, NULL);
>     assert(res == JVMTI_ERROR_NONE);
> 
>     res = (*_jvmti)->SetEventNotificationMode(_jvmti, JVMTI_ENABLE, JVMTI_EVENT_NATIVE_METHOD_BIND, NULL);
>     
>     /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! line 122  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
>     assert(res == JVMTI_ERROR_NONE);
> 
>     res = (*_jvmti)->SetEventNotificationMode(_jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_CONTENDED_ENTER, NULL);
>     assert(res == JVMTI_ERROR_NONE);
> 
>     res = (*_jvmti)->SetEventNotificationMode(_jvmti, JVMTI_ENABLE, JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, NULL);
>     assert(res == JVMTI_ERROR_NONE);
> }
> =============================================================================
> 
> Does it makes sense for anybody? Is it possible to fix this somehow?
> 
> Thank you in advance!
> 
> -- 
> Eugene N Dzhurinsky



-- 
Greg Lewis                          Email   : glewis@eyesbeyond.com
Eyes Beyond                         Web     : http://www.eyesbeyond.com
Information Technology              FreeBSD : glewis@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080516234056.GB43930>