There are a couple of useful options here.
First I would recommend writing the Main() routine for all of your windows services to support running them either as a windows service or as a console app. That way you can run on the console for debugging much easier. A simplified Main() routine could look like this:
private static void Main(string[] args)
{
_service = new Service();
if (args.Length == 0 && !Debugger.IsAttached)
{
Run(new ServiceBase[] {_service});
}
else
{
Console.WriteLine("Starting Service...");
_service.OnStart(new string[0]);
Console.WriteLine("Service is running... Hit ENTER to break.");
Console.ReadLine();
_service.OnStop();
}
}
You can get fancier and support different arguments for things like help, console, service, install, uninstall.
Another option is to add a Debugger.Break() statement in your code. Then you can run the service as normal and when it hits that point it will prompt the user to attach a debugger.