次の方法で共有


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 がコンパイルされたソース ドキュメント内の対応する行番号と列番号の間のマッピングを含む構造体です。 シーケンス ポイントは、ポータブル PDB デバッグ シンボルのテーブルに格納されます MethodDebugInformation 。 詳細については、「Portable PDB v1.0:書式指定

フィールド

HiddenLine

非表示のシーケンス ポイントの行番号の値を指定します。

プロパティ

Document

このシーケンス ポイントを含むソース ドキュメントを取得します。

EndColumn

このシーケンス ポイントの最後の文字の列番号を取得します。

EndLine

このシーケンス ポイントの最後の文字の行番号を取得します。

IsHidden

このシーケンス ポイントが非表示かどうかを示す値を取得します。

Offset

メソッド本体の先頭から、このシーケンス ポイントの IL オフセットをバイト単位で取得します。

StartColumn

このシーケンス ポイントの最初の文字の列番号を取得します。

StartLine

このシーケンス ポイントの最初の文字の行番号を取得します。

メソッド

Equals(Object)

現在のシーケンス ポイントが指定したオブジェクトと等しいかどうかを示します。

Equals(SequencePoint)

現在のオブジェクトが、同じ型の別のオブジェクトと等しいかどうかを示します。

GetHashCode()

このシーケンス ポイントのハッシュ コードを取得します。

適用対象