public GivenThatIWantToUsePortablePdbsToFindMethodInformation() { var stream = new FileStream( Path.Combine(AppContext.BaseDirectory, "TestAppWithPortablePdbs.pdb"), FileMode.Open, FileAccess.Read); _pdbReader = new PortablePdbReader(stream); }
private static ISymbolReader GetSymbolReader(string binaryPath) { var pdbFilePath = Path.ChangeExtension(binaryPath, ".pdb"); // For remote scenario, also look for pdb in current directory, (esp for UWP) // The alternate search path should be an input from Adapters, but since it is not so currently adding a HACK pdbFilePath = !File.Exists(pdbFilePath) ? Path.Combine(Directory.GetCurrentDirectory(), Path.GetFileName(pdbFilePath)) : pdbFilePath; using (var stream = new FileHelper().GetStream(pdbFilePath, FileMode.Open, FileAccess.Read)) { if (PortablePdbReader.IsPortable(stream)) { return(new PortableSymbolReader()); } return(new FullSymbolReader()); } }
private static ISymbolReader GetSymbolReader(string binaryPath) { #if NET46 var pdbFilePath = Path.ChangeExtension(binaryPath, ".pdb"); using (var stream = new FileHelper().GetStream(pdbFilePath, FileMode.Open, FileAccess.Read)) { if (PortablePdbReader.IsPortable(stream)) { return(new PortableSymbolReader()); } return(new FullSymbolReader()); } #else // We don't support full PDB files with .net core return(new PortableSymbolReader()); #endif }
private static List <EnhancedStackFrame> GetFrames(StackTrace stackTrace) { var frames = new List <EnhancedStackFrame>(); var stackFrames = stackTrace.GetFrames(); if (stackFrames == null) { return(frames); } using (var portablePdbReader = new PortablePdbReader()) { for (var i = 0; i < stackFrames.Length; i++) { var frame = stackFrames[i]; var method = frame.GetMethod(); // Always show last stackFrame if (!ShowInStackTrace(method) && i < stackFrames.Length - 1) { continue; } var fileName = frame.GetFileName(); var row = frame.GetFileLineNumber(); var column = frame.GetFileColumnNumber(); var ilOffset = frame.GetILOffset(); if (string.IsNullOrEmpty(fileName) && ilOffset >= 0) { // .NET Framework and older versions of mono don't support portable PDBs // so we read it manually to get file name and line information portablePdbReader.PopulateStackFrame(frame, method, frame.GetILOffset(), out fileName, out row, out column); } var stackFrame = new EnhancedStackFrame(frame, GetMethodDisplayString(method), fileName, row, column); frames.Add(stackFrame); } return(frames); } }