Freigeben über


SequencePoint Struktur

Definition

Stellt einen portablen PDB-Sequenzpunkt dar.

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)
Vererbung
SequencePoint
Implementiert

Beispiele

In diesem Beispiel wird gezeigt, wie Sequenzpunkte der vom Metadatentoken definierten Methode gelesen und die Quellzeilenzuordnungen angezeigt werden:

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));
        }
    }
}

Hinweise

Sequenzpunkt ist eine Struktur, die die Zuordnung zwischen IL-Offset und entsprechenden Zeilen- und Spaltennummern in einem Quelldokument enthält, aus dem diese IL kompiliert wurde. Sequenzpunkte werden in der MethodDebugInformation Tabelle der Portable PDB-Debugsymbole gespeichert. Weitere Informationen finden Sie unter Portierbares PDB v1.0: Formatspezifikation.

Felder

HiddenLine

Gibt einen Zeilennummerwert für einen ausgeblendeten Sequenzpunkt an.

Eigenschaften

Document

Ruft das Quelldokument ab, das diesen Sequenzpunkt enthält.

EndColumn

Ruft die Spaltennummer des letzten Zeichens in diesem Sequenzpunkt ab.

EndLine

Ruft die Zeilennummer des letzten Zeichens in diesem Sequenzpunkt ab.

IsHidden

Ruft einen Wert ab, der angibt, ob dieser Sequenzpunkt ausgeblendet ist.

Offset

Ruft den IL-Offset dieses Sequenzpunkts vom Anfang des Methodentexts in Bytes ab.

StartColumn

Ruft die Spaltennummer des ersten Zeichens in diesem Sequenzpunkt ab.

StartLine

Ruft die Zeilennummer des ersten Zeichens in diesem Sequenzpunkt ab.

Methoden

Equals(Object)

Gibt an, ob der aktuelle Sequenzpunkt dem angegebenen Objekt entspricht.

Equals(SequencePoint)

Gibt an, ob das aktuelle Objekt gleich einem anderen Objekt des gleichen Typs ist.

GetHashCode()

Ruft den Hashcode dieses Sequenzpunkts ab.

Gilt für: