internal void InitializeDebuggerChannel(JavaDebugEngine debugEngine, IDebugEventCallback2 callback)
        {
            Contract.Requires <ArgumentNullException>(debugEngine != null, "debugEngine");
            Contract.Requires <ArgumentNullException>(callback != null, "callback");

            _debugEngine = debugEngine;
            _callback    = callback;

            var connector = new LocalDebuggingAttachingConnector();

            Dictionary <string, IConnectorArgument> arguments = new Dictionary <string, IConnectorArgument>();

            string argumentName = "pid";
            IConnectorIntegerArgument defaultArgument = (IConnectorIntegerArgument)connector.DefaultArguments[argumentName];
            IConnectorIntegerArgument argument        = new ConnectorIntegerArgument(defaultArgument, (int)_process.GetPhysicalProcessId().dwProcessId);

            arguments.Add(argumentName, argument);

            argumentName = "sourcePaths";
            IConnectorStringArgument defaultPathsArgument = (IConnectorStringArgument)connector.DefaultArguments[argumentName];
            List <string>            sourcePaths          = GetSourcePaths();
            IConnectorStringArgument stringArgument       = new ConnectorStringArgument(defaultPathsArgument, string.Join(";", sourcePaths));

            arguments.Add(argumentName, stringArgument);

            connector.AttachComplete += HandleAttachComplete;
            _virtualMachine           = connector.Attach(arguments);

            IVirtualMachineEvents events = _virtualMachine.GetEventQueue() as IVirtualMachineEvents;

            if (events != null)
            {
                events.VirtualMachineStart     += HandleVirtualMachineStart;
                events.VirtualMachineDeath     += HandleVirtualMachineDeath;
                events.SingleStep              += HandleSingleStep;
                events.Breakpoint              += HandleBreakpoint;
                events.MethodEntry             += HandleMethodEntry;
                events.MethodExit              += HandleMethodExit;
                events.MonitorContendedEnter   += HandleMonitorContendedEnter;
                events.MonitorContendedEntered += HandleMonitorContendedEntered;
                events.MonitorContendedWait    += HandleMonitorContendedWait;
                events.MonitorContendedWaited  += HandleMonitorContendedWaited;
                events.Exception         += HandleException;
                events.ThreadStart       += HandleThreadStart;
                events.ThreadDeath       += HandleThreadDeath;
                events.ClassPrepare      += HandleClassPrepare;
                events.ClassUnload       += HandleClassUnload;
                events.FieldAccess       += HandleFieldAccess;
                events.FieldModification += HandleFieldModification;
            }
        }
 public ConnectorStringArgument(IConnectorStringArgument descriptor, string value)
     : base(descriptor)
 {
     Contract.Requires(descriptor != null);
     _value = value;
 }
 public ConnectorStringArgument(IConnectorStringArgument descriptor, string value)
     : base(descriptor)
 {
     Contract.Requires(descriptor != null);
     _value = value;
 }