NetBeans 6.1 Profiler, Sun JDK 1.5/1.6
Greg Lewis
glewis at eyesbeyond.com
Fri May 16 23:40:58 UTC 2008
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 at eyesbeyond.com
Eyes Beyond Web : http://www.eyesbeyond.com
Information Technology FreeBSD : glewis at FreeBSD.org
More information about the freebsd-java
mailing list