SequencePoint Struktura

Definice

Představuje přenosný sekvenční bod PDB.

public value class SequencePoint : IEquatable<System::Reflection::Metadata::SequencePoint>
public readonly struct SequencePoint : IEquatable<System.Reflection.Metadata.SequencePoint>
public struct SequencePoint : IEquatable<System.Reflection.Metadata.SequencePoint>
type SequencePoint = struct
Public Structure SequencePoint
Implements IEquatable(Of SequencePoint)
Dědičnost
SequencePoint
Implementuje

Příklady

Tento příklad ukazuje, jak číst sekvenční body metody definované tokenem metadat a zobrazit mapování zdrojových řádků:

public static void ReadSourceLineData(string pdbPath, int methodToken)
{
    // Determine method row number
    EntityHandle ehMethod = MetadataTokens.EntityHandle(methodToken);

    if (ehMethod.Kind != HandleKind.MethodDefinition)
    {
        Console.WriteLine($"Invalid token kind: {ehMethod.Kind}");
        return;
    }

    int rowNumber = MetadataTokens.GetRowNumber(ehMethod);

    // MethodDebugInformation table is indexed by same row numbers as MethodDefinition table
    MethodDebugInformationHandle hDebug = MetadataTokens.MethodDebugInformationHandle(rowNumber);

    // Open Portable PDB file
    using var fs = new FileStream(pdbPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    using MetadataReaderProvider provider = MetadataReaderProvider.FromPortablePdbStream(fs);
    MetadataReader reader = provider.GetMetadataReader();

    if (rowNumber > reader.MethodDebugInformation.Count)
    {
        Console.WriteLine("Error: Method row number is out of range");
        return;
    }

    // Print source line information as console table
    MethodDebugInformation di = reader.GetMethodDebugInformation(hDebug);
    Console.WriteLine("IL offset | Start line | Start col. | End line | End col. |");

    foreach (SequencePoint sp in di.GetSequencePoints())
    {
        if (sp.IsHidden)
        {
            Console.WriteLine($"{sp.Offset.ToString().PadLeft(9)} | (hidden sequence point)");
        }
        else
        {
            Console.WriteLine("{0} |{1} |{2} |{3} |{4} |", 
                sp.Offset.ToString().PadLeft(9), 
                sp.StartLine.ToString().PadLeft(11),
                sp.StartColumn.ToString().PadLeft(11),
                sp.EndLine.ToString().PadLeft(9),
                sp.EndColumn.ToString().PadLeft(9));
        }
    }
}

Poznámky

Sekvenční bod je struktura, která obsahuje mapování mezi posunem il a odpovídajícími čísly řádků a sloupců ve zdrojovém dokumentu, ze kterého byl il kompilován. Sekvenční body jsou uloženy v MethodDebugInformation tabulce přenosných symbolů ladění PDB. Další informace najdete v tématu Portable PDB v1.0: Specifikace formátu.

Pole

HiddenLine

Určuje hodnotu čísla řádku pro skrytý bod sekvence.

Vlastnosti

Document

Získá zdrojový dokument, který obsahuje tento sekvenční bod.

EndColumn

Získá číslo sloupce posledního znaku v tomto pořadovém bodu.

EndLine

Získá číslo řádku posledního znaku v tomto sekvenčním bodu.

IsHidden

Získá hodnotu, která označuje, zda je tento sekvenční bod skrytý.

Offset

Získá posun IL tohoto sekvenčního bodu od začátku těla metody v bajtech.

StartColumn

Získá číslo sloupce prvního znaku v tomto sekvenčním bodu.

StartLine

Získá číslo řádku prvního znaku v tomto pořadovém bodu.

Metody

Equals(Object)

Určuje, zda je aktuální bod sekvence roven zadanému objektu.

Equals(SequencePoint)

Určuje, zda je aktuální objekt roven jinému objektu stejného typu.

GetHashCode()

Získá hash kód tohoto sekvenčního bodu.

Platí pro