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!

  1. 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.
  2. Now click Tools → Permissions and give yourself access to it.
  3. 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.
  4. 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).
  5. Now, to finish up the MSCRM server side, do an IISReset and restart the Async Windows Service.
  6. Back on your machine, in Visual Studio, set a breakpoint in your code.
  7. 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.
  8. 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.
  9. Now do whatever is needed to trigger your event, and watch Visual Studio on your machine do its magic!