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)
- Наследование
- Реализации
Примеры
В этом примере показано, как считывать точки последовательности метода, определенного маркером метаданных, и отображать его сопоставления исходных строк:
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: спецификация формата.
Поля
Hidden |
Задает значение номера строки для скрытой точки последовательности. |
Свойства
Document |
Возвращает исходный документ, содержащий эту точку последовательности. |
End |
Возвращает номер столбца последнего символа в этой точке последовательности. |
End |
Возвращает номер строки последнего символа в этой точке последовательности. |
Is |
Возвращает значение, указывающее, скрыта ли эта точка последовательности. |
Offset |
Возвращает смещение IL этой точки последовательности от начала тела метода в байтах. |
Start |
Возвращает номер столбца первого символа в этой точке последовательности. |
Start |
Возвращает номер строки первого символа в этой точке последовательности. |
Методы
Equals(Object) |
Указывает, равна ли текущая точка последовательности указанному объекту. |
Equals(Sequence |
Указывает, равен ли текущий объект другому объекту того же типа. |
Get |
Возвращает хэш-код этой точки последовательности. |
Применяется к
Продукт | Версии |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8 (package-provided), 8, 9 (package-provided), 9, 10 (package-provided), 10 |
.NET Standard | 2.0 (package-provided) |