Sdílet prostřednictvím


SequencePoint Struktura

Definice

Představuje přenosný bod sekvence 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 načíst body sekvence 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

Bod sekvence 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 MethodDebugInformation v 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 bod sekvence.

EndColumn

Získá číslo sloupce poslední znak v tomto bodě sekvence.

EndLine

Získá číslo řádku poslední znak v tomto bodě sekvence.

IsHidden

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

Offset

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

StartColumn

Získá číslo sloupce prvního znaku v tomto bodě sekvence.

StartLine

Získá číslo řádku prvního znaku v tomto bodě sekvence.

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á kód hash tohoto bodu sekvence.

Platí pro