public void ConnectViaDebugChannel(DebugConnectionListener target) { try { var result = DebugConnection.Connect(target); Client = new RpcClient(result, this); RaisePropertyChanged(nameof(Client)); } catch { Messages.Add($"Failed to connect to debug channel"); } }
// Launches a process by means of the debug engine. // Normally, Visual Studio launches a program using the IDebugPortEx2::LaunchSuspended method and then attaches the debugger // to the suspended program. However, there are circumstances in which the debug engine may need to launch a program // (for example, if the debug engine is part of an interpreter and the program being debugged is an interpreted language), // in which case Visual Studio uses the IDebugEngineLaunch2::LaunchSuspended method // The IDebugEngineLaunch2::ResumeProcess method is called to start the process after the process has been successfully launched in a suspended state. int IDebugEngineLaunch2.LaunchSuspended(string pszServer, IDebugPort2 port, string exe, string args, string dir, string env, string options, enum_LAUNCH_FLAGS launchFlags, uint hStdInput, uint hStdOutput, uint hStdError, IDebugEventCallback2 ad7Callback, out IDebugProcess2 process) { Debug.Assert(_events == null); Debug.Assert(_process == null); Debug.Assert(_ad7ProgramId == Guid.Empty); _events = ad7Callback; List <string[]> dirMapping = null; Guid processId; if (Guid.TryParse(exe, out processId)) { _process = DebugConnectionListener.GetProcess(processId); _attached = true; _pseudoAttach = true; } else { _process = new NodeProcess(exe, args, dir, BreakOnAllExceptions, dirMapping); } _programCreated = false; AttachProcessEvents(_process); _process.Start(); var adProcessId = new AD_PROCESS_ID { ProcessIdType = (uint)enum_AD_PROCESS_ID.AD_PROCESS_ID_SYSTEM, dwProcessId = (uint)_process.Id }; EngineUtils.RequireOk(port.GetProcess(adProcessId, out process)); Debug.WriteLine("NodeEngine LaunchSuspended returning S_OK"); Debug.Assert(process != null); Debug.Assert(!_process.HasExited); return(VSConstants.S_OK); }