Поделиться через


SequencePoint Структура

Определение

Представляет переносимую точку последовательности 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)
Наследование
SequencePoint
Реализации

Примеры

В этом примере показано, как считывать точки последовательности метода, определенного маркером метаданных, и отображать его сопоставления исходных строк:

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

Комментарии

Точка последовательности — это структура, содержащая сопоставление между смещением IL и соответствующими номерами строк и столбцов в исходном документе, из которых был скомпилирован этот IL. Точки последовательности хранятся в MethodDebugInformation таблице переносимых символов отладки PDB. Дополнительные сведения см. в разделе Переносимый PDB версии 1.0: спецификация формата.

Поля

HiddenLine

Задает значение номера строки для скрытой точки последовательности.

Свойства

Document

Возвращает исходный документ, содержащий эту точку последовательности.

EndColumn

Возвращает номер столбца последнего символа в этой точке последовательности.

EndLine

Возвращает номер строки последнего символа в этой точке последовательности.

IsHidden

Возвращает значение, указывающее, скрыта ли эта точка последовательности.

Offset

Возвращает смещение IL этой точки последовательности от начала тела метода в байтах.

StartColumn

Возвращает номер столбца первого символа в этой точке последовательности.

StartLine

Возвращает номер строки первого символа в этой точке последовательности.

Методы

Equals(Object)

Указывает, равна ли текущая точка последовательности указанному объекту.

Equals(SequencePoint)

Указывает, равен ли текущий объект другому объекту того же типа.

GetHashCode()

Возвращает хэш-код этой точки последовательности.

Применяется к