1

私は (mono.cecil を使用して) fody アドインを開発しており、メソッドの先頭にいくつかのコードを挿入しています。デバッガーが挿入されたコードをステップオーバーするようにします。

ここでいくつかの情報を見つけました: http://blogs.msdn.com/b/abhinaba/archive/2005/10/10/479016.aspx

そこで、挿入された命令のシーケンス ポイントを行番号 0xfeefee に更新しようとしました。

次のコードを使用してこれを行っています。

    public static void Inject(MethodDefinition method, List<Instruction> instructions)
    {
        var methodInstructions = method.Body.Instructions;

        int index = 0;
        var sequencePoint = method.Body.Instructions
            .Where(instruction => instruction.SequencePoint != null)
            .Select(instruction => instruction.SequencePoint)
            .FirstOrDefault();

        if (method.HasBody && sequencePoint != null && sequencePoint.Document != null)
        {
            var instruction = instructions[0];
            instruction.SequencePoint = new SequencePoint(sequencePoint.Document);
            instruction.SequencePoint.StartLine = 0xfeefee;
            instruction.SequencePoint.EndLine = 0xfeefee;
        }

        foreach (var instruction in instructions)
        {
            methodInstructions.Insert(index++, instruction);
        }

        method.Body.OptimizeMacros();
    }

これは基本的に NullGuard.Fody プロジェクトが使用するコードと同じはずですが、機能しません。コードが挿入されたメソッドにデバッグしようとすると、Visual Studio からソースが利用できないという情報が引き続き表示されます。

pdb ファイルを更新するために他に何かする必要がありますか?

4

1 に答える 1

1

Whereクエリから を削除して、最初のシーケンス ポイントを選択してみてください。

メソッドの最初の命令にシーケンス ポイントがある場合にのみ、非表示のシーケンス ポイントを追加する必要があります。

于 2015-02-28T10:40:39.543 に答える