I observed yesterday that coverage.exe balked in
PdbReader.GetSegmentsByMethod() when trying to instrument F#-derived assemblies.
By checking to see whether a new
CodeSegment entry would provoke the exception by having an identical offset to a pre-existing one, and dumping both old and new to the console, I observed that at least one, and often both, had associated line number 0x00Feefee -- i.e. were compiler generated code with no source reference.
And in the method
Executor.ProcessMethod(), which is the only place to call
PdbReader.GetSegmentsByMethod(), entries with this line number are discarded before beginning to instrument the IL code -- so it would seem to make perfect sense to discard these
CodeSegments before putting them in the dictionary. With that change, instrumentation completes cleanly.
Of course, having built coverage.exe with C#4 for .net 4, the helper DLL it built is compiled for .net 4 as well, which has stymied my first test attempt. Oh well, enough for today.