Тайм-аут оценки функции при изучении переменных при отладке / пошаговом выполнении - PullRequest
24 голосов
/ 16 марта 2012

При отладке / пошаговом прохождении кода, когда я пытаюсь исследовать переменную в часах, я получаю ошибки для каждого тайм-аута оценки функции определения внутренней переменной.

Кто-нибудь знает, почему это так и как этого избежать? Как это влияет на мою способность отлаживать код.

Это в пределах VS2010 Premium.

Ответы [ 2 ]

21 голосов
/ 16 марта 2012

Наиболее вероятная причина этой проблемы - неявная оценка свойства или ToString метод, который вызывает проблему с потоком оценки CLR. Для проверки отключите неявную оценку.

  • Инструменты -> Параметры
  • Debugging
  • Снимите флажок «Включить оценку свойства и другие неявные вызовы функций»

Затем перезапустите сценарий и посмотрите, работает ли он.

5 голосов
/ 16 марта 2012

Visual studio выполняет метод получения свойства, чтобы получить его значение, если это занимает много времени, либо из-за того, что он делает что-то дорогое, вы получаете эту ошибку.рассмотрим:

public class foo
{
    private object lockObject = new object();
    public int bar
    {
        get
        {
             lock(lockObject){
                return 42;
             }
         }
     }
     public int aMethod()
     {
         lock(lockObject)
         {
             var a = this.bar;
             return a*2;   //insert a break point here
          }
      }
}

Если вы добавите точку останова в операторе возврата в aMethod, отладчик не сможет оценить свойство bar, поскольку для этого требуется, чтобы он получил объект блокировки, но он выигралсделать это невозможно, потому что программа будет удерживать эту блокировку вечно, пока активна точка останова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...