示例#1
0
        public StackFrameDeminificationResult DeminifyStackFrame(StackFrame stackFrame)
        {
            var sourceMap = _sourceMapStore.GetSourceMapForUrl(stackFrame.FilePath);

            if (sourceMap == null)
            {
                return(StackFrameDeminificationResult.Error(DeminificationError.NoSourceMap, stackFrame));
            }

            var noNames = sourceMap.Names.Count == 0;

            for (var i = 0; i < sourceMap.ParsedMappings.Count; i++)
            {
                var m = sourceMap.ParsedMappings[i];
                if (m.GeneratedSourcePosition.ZeroBasedLineNumber == stackFrame.SourcePosition.ZeroBasedLineNumber)
                {
                    if (m.GeneratedSourcePosition.ZeroBasedColumnNumber >= stackFrame.SourcePosition.ZeroBasedColumnNumber)
                    {
                        if (m.GeneratedSourcePosition.ZeroBasedColumnNumber > stackFrame.SourcePosition.ZeroBasedColumnNumber && i > 0)
                        {
                            m = sourceMap.ParsedMappings[i - 1];
                        }

                        var methodName = noNames
                            ? stackFrame.MethodName
                            : m.OriginalName;

                        return(StackFrameDeminificationResult.Ok(new StackFrame(methodName, m.OriginalFileName,
                                                                                m.OriginalSourcePosition)));;
                    }
                }
            }

            return(StackFrameDeminificationResult.Error(DeminificationError.NoMatchingMapingInSourceMap, stackFrame));
        }
示例#2
0
        /// <summary>
        /// This method will deminify a single stack from from a minified stack trace.
        /// </summary>
        /// <returns>Returns a StackFrameDeminificationResult that contains a stack trace that has been translated to the original source code. The DeminificationError Property indicates if the StackFrame could not be deminified. DeminifiedStackFrame will not be null, but any properties of DeminifiedStackFrame could be null if the value could not be extracted. </returns>
        public StackFrameDeminificationResult DeminifyStackFrame(StackFrame stackFrame, string callerSymbolName)
        {
            if (stackFrame == null)
            {
                throw new ArgumentNullException(nameof(stackFrame));
            }

            SourceMap      sourceMap = _sourceMapStore.GetSourceMapForUrl(stackFrame.FilePath);
            SourcePosition generatedSourcePosition = stackFrame.SourcePosition;

            StackFrameDeminificationResult result = null;

            if (_methodNameDeminifier != null)
            {
                result = _methodNameDeminifier.DeminifyStackFrame(stackFrame, callerSymbolName);
            }

            if (result == null || result.DeminificationError == DeminificationError.NoSourceCodeProvided)
            {
                result = new StackFrameDeminificationResult
                {
                    DeminificationError  = DeminificationError.None,
                    DeminifiedStackFrame = new StackFrame {
                        MethodName = callerSymbolName
                    }
                };
            }

            if (result.DeminificationError == DeminificationError.None)
            {
                MappingEntry?generatedSourcePositionMappingEntry =
                    sourceMap?.GetMappingEntryForGeneratedSourcePosition(generatedSourcePosition);

                if (generatedSourcePositionMappingEntry == null)
                {
                    if (sourceMap == null)
                    {
                        result.DeminificationError = DeminificationError.NoSourceMap;
                    }
                    else if (sourceMap.ParsedMappings == null)
                    {
                        result.DeminificationError = DeminificationError.SourceMapFailedToParse;
                    }
                    else
                    {
                        result.DeminificationError = DeminificationError.NoMatchingMapingInSourceMap;
                    }
                }
                else
                {
                    result.DeminifiedStackFrame.FilePath       = generatedSourcePositionMappingEntry.Value.OriginalFileName;
                    result.DeminifiedStackFrame.SourcePosition = generatedSourcePositionMappingEntry.Value.OriginalSourcePosition;
                    result.DeminifiedSymbolName = generatedSourcePositionMappingEntry.Value.OriginalName;
                }
            }

            return(result);
        }
        /// <summary>
        /// This method will deminify a single stack from from a minified stack trace.
        /// </summary>
        /// <returns>Returns a StackFrameDeminificationResult that contains a stack trace that has been translated to the original source code. The DeminificationError Property indicates if the StackFrame could not be deminified. DeminifiedStackFrame will not be null, but any properties of DeminifiedStackFrame could be null if the value could not be extracted. </returns>
        public override StackFrameDeminificationResult DeminifyStackFrame(StackFrame stackFrame)
        {
            if (stackFrame == null)
            {
                throw new ArgumentNullException(nameof(stackFrame));
            }

            SourceMap      sourceMap = _sourceMapStore.GetSourceMapForUrl(stackFrame.FilePath);
            SourcePosition generatedSourcePosition = stackFrame.SourcePosition;

            StackFrameDeminificationResult result = base.DeminifyStackFrame(stackFrame);

            if (result.DeminificationError == DeminificationError.None)
            {
                MappingEntry generatedSourcePositionMappingEntry =
                    sourceMap?.GetMappingEntryForGeneratedSourcePosition(generatedSourcePosition);

                if (generatedSourcePositionMappingEntry == null)
                {
                    if (sourceMap == null)
                    {
                        result.DeminificationError = DeminificationError.NoSourceMap;
                    }
                    else if (sourceMap.ParsedMappings == null)
                    {
                        result.DeminificationError = DeminificationError.SourceMapFailedToParse;
                    }
                    else
                    {
                        result.DeminificationError = DeminificationError.NoMatchingMapingInSourceMap;
                    }
                }

                result.DeminifiedStackFrame.FilePath       = generatedSourcePositionMappingEntry?.OriginalFileName;
                result.DeminifiedStackFrame.SourcePosition = generatedSourcePositionMappingEntry?.OriginalSourcePosition;
            }

            return(result);
        }