Whenever you write code that starts a new Process, your debugging experience is rather lacking – you’re stuck outside of the debugger. The following extension method will attach the Visual Studio debugger to your process:
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using EnvDTE;
using Process = EnvDTE.Process;
namespace Sample
{
///<summary>
/// Class ProcessExtender
/// Attach to other processes in order to debug.
///</summary>
public static class ProcessExtender
{
conststring progId = @"VisualStudio.DTE.11.0";
//const string progId = @"VisualStudio.DTE.9.0"; // Vs2008
#region -- Public Methods --
///summary
/// Attaches Visual Studio (2010) to the specified process.
////summary
///param name=processThe process./param
public static void Attach(this System.Diagnostics.Process process)
{
// Reference visual studio core
DTE dte;
try
{
dte = (DTE)Marshal.GetActiveObject(progId);
}
catch (COMException)
{
Debug.WriteLine(String.Format(@"Visual studio not found."));
return;
}
// Try loop - visual studio may not respond the first time.
int tryCount = 5;
while (tryCount-- 0)
{
try
{
Processes processes = dte.Debugger.LocalProcesses;
foreach (Process proc in processes.CastProcess().Where(
proc = proc.Name.IndexOf(process.ProcessName) != -1))
{
proc.Attach();
Debug.WriteLine(String.Format("Attached to process {0} successfully.", process.ProcessName));
break;
}
break;
}
catch (COMException)
{
System.Threading.Thread.Sleep(1000);
}
}
}
#endregion
}
}