Сбой QuickWatch и отладка останавливается при попытке просмотра пользовательского объекта - PullRequest
2 голосов
/ 11 марта 2011

У меня есть объект Branch, который имеет некоторые свойства Name, Link и несколько других свойств POCO.Он также имеет родительский объект, который является ссылкой на другой элемент ветви.Он также имеет свойство Children, которое является объектом TreeBranches.Это IList.По сути, это моя замена TreeNode.

Во время отладки моего приложения я могу останавливаться на точках останова в любом месте и QuickWatch любого другого объекта как можно больше вложенного.Они все работают.Тем не менее, когда я QuickWatch объект Branch, он показывает мне «корневой» элемент.Когда я пытаюсь перейти в какую-либо дочернюю ветку, она на мгновение приостанавливается, и тогда все значения перестают ... жить?То есть я не могу долго нажимать кнопку обновления.Когда я закрываюсь из окна QuickWatch, я вижу, что мой веб-сайт находится на странице, как будто я не могу подключиться к веб-сайту.Я даже не могу продолжить, нажимая F5.

Я сделал много объектов в своей карьере, и я мог бы "наблюдать" за ними всеми.Есть ли какой-то особый атрибут, который я должен применить?Где-нибудь есть журнал ошибок, где я вижу, в чем проблема?Я установил его, чтобы разбить на «брошенные» ошибки для исключений CLR, но ничего.Возможно, потому что я уже нахожусь в «перерыве».

Единственное, что «может» быть проблемой, - это то, что я переопределил метод ToString в объекте Branch, чтобы показать свойства в Branch и счетчикдетей.Тогда объект TreeBranches также имеет метод ToString, который рекурсивно проходит по каждому из объектов Branch.

Есть мысли?

1 Ответ

0 голосов
/ 19 апреля 2011

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

Когда все перестает работать, выводится ли текст «Оценка функции отключена, потому что истек срок ожидания предыдущей оценки функции. Вы должны продолжить выполнение». показать?

Если это так, я готов поспорить, что ваша реализация ToString содержит ошибки и входит в бесконечный цикл, или просто имеет проблему с производительностью и занимает слишком много времени. Попробуйте заменить эти .ToStrings на «return string.Empty;» и посмотреть, если проблема не устранена?

В отличие от вызовов методов, отладчик предполагает, что объект .ToString объекта должен возвращаться быстро и не иметь побочных эффектов, и поэтому будет переоценивать его каждый раз, когда вы F5 и ломаетесь, пока объект все еще находится в Смотреть окно.

Если это не .ToString, это может быть какое-то свойство объекта, которое выполняет большую работу и время ожидания - проверьте, существует ли такое свойство в вашем объекте, и рассмотрите возможность его украшения с помощью [DebuggerBrowsable (DebuggerBrowsableState.Never. )].

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