2015-02-09 7 views
1

Я разрабатываю дополнение fody (используя mono.cecil) и вставляю некоторый код в начале метода. Я хочу, чтобы отладчик перешагнул введенный код.Fody/Mono.Cecil: Скрыть строки в отладчике

Я нашел некоторую информацию здесь: 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 использует, но он не работает. Я по-прежнему получаю информацию о недоступности источника с визуальной студией при попытке отладки в методе, в который был введен код.

Нужно ли мне что-либо делать, чтобы обновить файл pdb?

ответ

1

Попробуйте удалить Where из запроса, чтобы выбрать первую точку последовательности.

Вам нужно только добавить свою скрытую точку последовательности, если первая инструкция метода имеет точку последовательности.

 Смежные вопросы

  • Нет связанных вопросов^_^