public GivenThatIWantToUsePortablePdbsToFindMethodInformation()
        {
            var stream = new FileStream(
                Path.Combine(AppContext.BaseDirectory, "TestAppWithPortablePdbs.pdb"),
                FileMode.Open,
                FileAccess.Read);

            _pdbReader = new PortablePdbReader(stream);
        }
Ejemplo n.º 2
0
        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());
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }