internal void Attach()
        {
            _environment.SetEventCallbacks(_eventCallbacks);

            jvmtiCapabilities capabilities = _environment.GetCapabilities();

            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.VMStart);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.VMInit);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.VMDeath);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ThreadStart);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ThreadEnd);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ClassLoad);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ClassPrepare);
#if false
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ClassFileLoadHook);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.DynamicCodeGenerated);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.DataDumpRequest);
            _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ResourceExhausted);
            //_environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.DataResetRequest);

            if (capabilities.CanGenerateExceptionEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.Exception);
            }
            if (capabilities.CanGenerateExceptionEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ExceptionCatch);
            }
            if (capabilities.CanGenerateSingleStepEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.SingleStep);
            }
            if (capabilities.CanGenerateFramePopEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.FramePop);
            }
            if (capabilities.CanGenerateBreakpointEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.Breakpoint);
            }
            if (capabilities.CanGenerateFieldAccessEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.FieldAccess);
            }
            if (capabilities.CanGenerateFieldModificationEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.FieldModification);
            }
            if (capabilities.CanGenerateMethodEntryEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MethodEntry);
            }
            if (capabilities.CanGenerateMethodExitEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MethodExit);
            }
            if (capabilities.CanGenerateNativeMethodBindEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.NativeMethodBind);
            }
            if (capabilities.CanGenerateCompiledMethodLoadEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.CompiledMethodLoad);
            }
            if (capabilities.CanGenerateCompiledMethodLoadEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.CompiledMethodUnload);
            }
            if (capabilities.CanGenerateMonitorEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MonitorWait);
            }
            if (capabilities.CanGenerateMonitorEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MonitorWaited);
            }
            if (capabilities.CanGenerateMonitorEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MonitorContendedEnter);
            }
            if (capabilities.CanGenerateMonitorEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.MonitorContendedEntered);
            }
            if (capabilities.CanGenerateGarbageCollectionEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.GarbageCollectionStart);
            }
            if (capabilities.CanGenerateGarbageCollectionEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.GarbageCollectionFinish);
            }
            if (capabilities.CanGenerateObjectFreeEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.ObjectFree);
            }
            if (capabilities.CanGenerateVmObjectAllocEvents)
            {
                _environment.SetEventNotificationMode(JvmEventMode.Enable, JvmEventType.VMObjectAlloc);
            }
#endif
        }