Condividi tramite


SequencePoint Struct

Definizione

Rappresenta un punto di sequenza PDB portabile.

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)
Ereditarietà
SequencePoint
Implementazioni

Esempio

In questo esempio viene illustrato come leggere i punti di sequenza del metodo definiti dal token di metadati e visualizzare i mapping delle linee di origine:

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

Commenti

Il punto di sequenza è una struttura che contiene il mapping tra l'offset DEL e i numeri di riga e colonna corrispondenti in un documento di origine da cui è stato compilato il servizio. I punti di sequenza vengono archiviati nella MethodDebugInformation tabella dei simboli di debug PDB portabili. Per altre informazioni, vedere PDB portabile v1.0: Specifica del formato.

Campi

HiddenLine

Specifica un valore del numero di riga per un punto di sequenza nascosto.

Proprietà

Document

Ottiene il documento di origine contenente questo punto di sequenza.

EndColumn

Ottiene il numero di colonna dell'ultimo carattere in questo punto di sequenza.

EndLine

Ottiene il numero di riga dell'ultimo carattere in questo punto di sequenza.

IsHidden

Ottiene un valore che indica se questo punto di sequenza è nascosto.

Offset

Ottiene l'offset IL di questo punto di sequenza dall'inizio del corpo del metodo, in byte.

StartColumn

Ottiene il numero di colonna del primo carattere in questo punto di sequenza.

StartLine

Ottiene il numero di riga del primo carattere in questo punto di sequenza.

Metodi

Equals(Object)

Indica se il punto di sequenza corrente è uguale all'oggetto specificato.

Equals(SequencePoint)

Indica se l'oggetto corrente è uguale a un altro oggetto dello stesso tipo.

GetHashCode()

Ottiene il codice hash di questo punto di sequenza.

Si applica a