Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 May 2008 15:19:27 +0300
From:      Eugeny N Dzhurinsky <bofh@redwerk.com>
To:        freebsd-java@freebsd.org
Subject:   NetBeans 6.1 Profiler, Sun JDK 1.5/1.6
Message-ID:  <20080516121927.GA13485@office.redwerk.com>

index | next in thread | raw e-mail

[-- Attachment #1 --]
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
#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

[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (FreeBSD)

iEYEARECAAYFAkgte84ACgkQy/i/DoZLbHwhdwCeOi6G+Wu8Tgc57leIlnpuypf+
cNkAni1kMMhjJRZz88xo2aTn+IBKaMS+
=iEWy
-----END PGP SIGNATURE-----
help

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