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


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

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

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