I've done this in the past using postsharp (http://www.postsharp.net/diagnostics). Your second suggestion would work, and doesn't have to introduce many changes.
You can configure postsharp to re-write your assembly after compilation to automatically hook into all method calls and write out what was passed using something like log4net to give you a detailed trace of what the application is doing. The only thing you will need to do is add a reference to postsharp, and add an attribute to the assemblyinfo class telling postsharp what to log (if their new diagnostic wizard doesn't do that automatically)
I'm doing it in production using the free postsharp licence - I ended up writing my own aspect (implementation of OnMethodBoundaryAspect) and hooked it up to every method in a very large legacy product using one line of code, before the diagnostic pattern library was available from postsharp.