How to debug workflow assemblies and plug-ins in MSCRM 4.0
Remote debugging sounds like the title to a book but it isn’t—in truth, I’ve never used remote debugging because I’ve never needed to. In MSCRM 3.0, exceptions bubbled up nicely in workflow, and I could do a lot on my own machine. However, in MSCRM 4.0, those exceptions don’t bubble up nicely. 😢 All you get is something like this:

Besides adding logging to your assembly (which you should do anyway), what’s a dev to do now? You can now debug your plugins and custom workflow activities using the remote debugging facility in Visual Studio—and that’s what I hope to show in the next 9 easy steps!
- On your machine, you’ll find a folder
_<system drive>\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger_(assuming you installed Visual Studio 2008 to the default location), which contains an x86 folder. Copy that to the MSCRM server and run the msvsmon.exe file. - Now click Tools → Permissions and give yourself access to it.
- Now load your plugin or custom workflow activity (when I refer to plugin for the rest of the document, I mean both—unless otherwise stated)—using the coughannoyingcough plugin registration/developer tool.
- Next, copy the PDB file for your assembly to the
_<system drive>\Program Files\Microsoft Dynamics CRM\Server\bin\assembly_(assuming you installed MSCRM 4.0 to the default location). - Now, to finish up the MSCRM server side, do an IISReset and restart the Async Windows Service.
- Back on your machine, in Visual Studio, set a breakpoint in your code.
- Next, click Debug → Attach to Process. The transport should be Default, and the Qualifier should be
_<domain>\<username running msvsmon.exe on the server>@<Server name>_. Note: You can get this from Tools → Options in msvsmon.exe. You may need to do some firewall configuration, but it should be automated. - Next, select the process to attach to:
- For an online plugin, attach the debugger to the w3wp.exe process on the Microsoft Dynamics CRM server.
- For an offline plugin, attach the debugger to the Microsoft.Crm.Application.Hoster.exe process.
- For asynchronous registered plugins or custom workflow activities, attach to the CrmAsyncService.exe process.
- Now do whatever is needed to trigger your event, and watch Visual Studio on your machine do its magic!
