SequencePoint Struct
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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. |