예제 #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 the method name of a single stack from from a minified stack trace.
        /// </summary>
        public virtual StackFrameDeminificationResult DeminifyStackFrame(StackFrame stackFrame, string callerSymbolName)
        {
            StackFrameDeminificationResult result = new StackFrameDeminificationResult
            {
                DeminificationError = DeminificationError.None
            };

            if (stackFrame == null)
            {
                throw new ArgumentNullException(nameof(stackFrame));
            }

            FunctionMapEntry wrappingFunction = null;

            // This code deminifies the stack frame by finding the wrapping function in
            // the generated code and then using the source map to find the name and
            // and original source location.
            List <FunctionMapEntry> functionMap = _functionMapStore.GetFunctionMapForSourceCode(stackFrame.FilePath);

            if (functionMap != null)
            {
                wrappingFunction =
                    _functionMapConsumer.GetWrappingFunctionForSourceLocation(stackFrame.SourcePosition, functionMap);

                if (wrappingFunction == null)
                {
                    result.DeminificationError = DeminificationError.NoWrapingFunctionFound;
                }
            }
            else
            {
                result.DeminificationError = DeminificationError.NoSourceCodeProvided;
            }

            result.DeminifiedStackFrame = new StackFrame {
                MethodName = wrappingFunction?.DeminfifiedMethodName
            };
            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);
        }