benaadams / Ben.Demystifier

High performance understanding for stack traces (Make error logs more productive)
Apache License 2.0
2.76k stars 118 forks source link

Demystifier throws TypeLoadException in PortablePdbReader #103

Open Maaatiii opened 4 years ago

Maaatiii commented 4 years ago

I tried to use Demystifier and it wasn't working correct. I debug source code and it throws exception in PortablePdbReader.

System.TypeLoadException: 
  at w System.Diagnostics.Internal.PortablePdbReader..ctor()
  at w System.Diagnostics.EnhancedStackTrace.GetFrames(StackTrace stackTrace)
  at w System.Diagnostics.EnhancedStackTrace.GetFrames(Exception exception)
  at w System.Diagnostics.EnhancedStackTrace..ctor(Exception e)
  at w System.Diagnostics.ExceptionExtentions.Demystify[T](T exception)

Exception has been thrown n this part of code:

using (PortablePdbReader portablePdbReader = new PortablePdbReader())
      {
        for (int index = 0; index < frames.Length; ++index)
        {
          StackFrame stackFrame = frames[index];
          MethodBase method = stackFrame.GetMethod();
          if (EnhancedStackTrace.ShowInStackTrace(method) || index >= frames.Length - 1)
          {
            string fileName = stackFrame.GetFileName();
            int row = stackFrame.GetFileLineNumber();
            int column = stackFrame.GetFileColumnNumber();
            int ilOffset = stackFrame.GetILOffset();
            if (string.IsNullOrEmpty(fileName) && ilOffset >= 0)
              portablePdbReader.PopulateStackFrame(stackFrame, method, stackFrame.GetILOffset(), out fileName, out row, out column);
            EnhancedStackFrame enhancedStackFrame = new EnhancedStackFrame(stackFrame, EnhancedStackTrace.GetMethodDisplayString(method), fileName, row, column);
            enhancedStackFrameList.Add(enhancedStackFrame);
          }
        }

I tested version 1.4 and 1.6 and the issue was the same.