Почему Visual Studio не может установить условную точку останова для этого простого свойства C #? - PullRequest
17 голосов
/ 17 ноября 2011

В моем объекте C # я установил условную точку останова с условием value == "Status" в установщике этого свойства.Обычно он украшен аспектом PostSharp, но я прокомментировал это в этом случае, и он все еще испытывает проблемы.

public virtual string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value; // breakpoint here
    }
}

Когда первый раз выполнение достигает точки останова, VS отображает ошибку:

Visual Studio MessageBox

РЕДАКТИРОВАТЬ - для возможности поиска выводится следующее сообщение:

Невозможно установить следующую точку останова:

At (файл) .cs, строка 137, символ 17 ('(class) .Name', строка 12), когда 'value == "Status"' имеет значение true

Для оценки функции требуются все потоки.

Вот как выглядит окно «Потоки»:

Debugger Threads window

Кто-нибудь видел это раньше или у вас есть идеи, что может вызвать отладчик в этом, казалось бы, простом случае?Может быть, это как-то связано со спящей нитью?

Ответы [ 3 ]

1 голос
/ 23 августа 2012

Я в конце концов изобрел обходной путь:

public virtual string Name
{
    get
    {
        return _name;
    }
    set
    {
        if (value == "Status")
            DoSomeNoOp(); // Breakpoint here, or Debug.Fail() inside your no-op

        _name = value;
    }
}
1 голос
/ 18 декабря 2011

Однажды у меня возникла эта проблема, когда я столкнулся с ситуацией, когда она выходит из-под выполнения базового потока. Немного больше информации о потоке вашего приложения поможет. Мне кажется, что это состояние гонки.

0 голосов
/ 22 августа 2012

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

...