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()

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

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