/// <include file='doc\VsShellUtilities.uex' path='docs/doc[@for="VsShellUtilities.LaunchDebugger"]/*' /> /// <devdoc> /// Launch the debugger. /// </devdoc> /// <param name="serviceProvider">The service provider.</param> /// <param name="info">A reference to a VsDebugTargetInfo object.</param> public static void LaunchDebugger(IServiceProvider serviceProvider, VsDebugTargetInfo info) { Debug.Assert(serviceProvider != null, "Cannot launch the debugger on an empty service provider"); if (serviceProvider == null) { throw new ArgumentException("serviceProvider"); } info.cbSize = (uint)Marshal.SizeOf(info); IntPtr ptr = Marshal.AllocCoTaskMem((int)info.cbSize); Marshal.StructureToPtr(info, ptr, false); try { IVsDebugger d = serviceProvider.GetService(typeof(IVsDebugger)) as IVsDebugger; Debug.Assert(d != null, "Could not retrieve IVsDebugger from " + serviceProvider.GetType().Name); if (d == null) { throw new InvalidOperationException(); } ErrorHandler.ThrowOnFailure(d.LaunchDebugTargets(1, ptr)); } catch (COMException e) { Trace.WriteLine("Exception : " + e.Message); } finally { if (ptr != IntPtr.Zero) { Marshal.FreeCoTaskMem(ptr); } } }