2009-12-25 3 views
2

Все вдруг я получил следующее сообщение об ошибке при отладке приложений, в Visual Studio 2010 Beta 2.«Невозможно оценить выражение ...» ошибка

«Невозможно вычислить выражение, так как нить останавливается в точке где мусора невозможно, , возможно, потому что код оптимизирован»

Почти каждое свойство или поле в часы витринах это сообщение. Кто-нибудь знает что происходит? и как избавиться от него?

Флажок «Оптимизировать код» на вкладке «Сборка свойств проекта» отключен.

+0

У меня такая же проблема – user

ответ

0

Через несколько дней я заметил ошибку исчезла ... Не знаю, что послужило причиной или решить ее ...

6

Здесь не является link к дискуссии по этому вопросу. По-видимому, когда аргументы функции являются структурами, а общая память, необходимая для стека для вызова функции, превосходит некоторые магические числа визуальных студийных отладчиков pukes.

Цитата

Я думаю, что общая сумма размеры «ссылок» для всех объектов в структуры и дополнительных параметров по методу был больше, чем 256 байт.

Я получил слово назад от MS по этому вопросу:

»... вообще говоря, когда общий размер аргументов, передаваемых функции в вызываемой больше, чем 256 байт, JIT сделает функцию абонента частично прерывается. В частично прерывистом коде не каждый место в коде является безопасным пунктом GC. Поэтому может быть небезопасно оценивать выражение в определенных местах. Когда это произойдет, вы получите сообщение об ошибке . "

Таким образом, кажется, что даже так как поля были ссылками, сумма всех их превысила 256 байт предела для отладчика.

У меня также есть это link из обсуждения OpenTK.

Цитата

я сделал некоторое рытье и, кажется, что проблема проистекает из того факта, что структуры данных, такие как Math матрица или вектор имеют типа «структура». У C# есть ограничение для типов значений, говорящих, что они не должны превышать 256 байтов данных при передаче в качестве аргументов функций, , если они не переданы по ссылке. Несоблюдение этого параметра обеспечивает бесперебойный код в режиме отладки. Проблема должна быть решена, если структуры данных с надписью преобразуются из структур в классы.

+1

+1 Это ответ ** CORRECT **. Изменение 'ByVal' на' ByRef' разрешило проблему. – nalply

+0

Ответ правильный. Рассчитайте размер структуры. Скорее всего, это более 256 байт. В том случае, когда я столкнулся с этим, я использовал в структуре много десятичных свойств, которые суммировали прошедшее ограничение на 256 байтов. Рефактором от десятичной до int было все, что нужно было, чтобы все работало. – Diizzy

0

Я получил это тоже, когда я ударил исключение NullReferenceException из стороннего элемента управления.

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

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

Кроме того, я ничего не делал с структурами, как упоминалось в @ ja72. Поэтому, похоже, эта ошибка может возникать и в других ситуациях.

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