| File: StackTraceExplorer\VSDebugCallstackParser.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Diagnostics.CodeAnalysis; using Microsoft.CodeAnalysis.EmbeddedLanguages.StackFrame; using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.StackTraceExplorer; internal sealed class VSDebugCallstackParser : IStackFrameParser { public bool TryParseLine(VirtualCharSequence line, [NotNullWhen(true)] out ParsedFrame? parsedFrame) { // Example line: // ConsoleApp4.dll!ConsoleApp4.MyClass.ThrowAtOne() Line 19 C# // |--------------------------------| // Symbol data we care about parsedFrame = null; var startPoint = -1; for (var i = 0; i < line.Length; i++) { if (line[i] == '!') { // +1 here because we always want to skip the '!' character startPoint = i + 1; break; } } if (startPoint <= 0 || startPoint == line.Length) { return false; } var textToParse = line[startPoint..]; var tree = StackFrameParser.TryParse(textToParse); if (tree is null) { return false; } parsedFrame = new ParsedStackFrame(tree); return true; } }