Thursday, December 9, 2010

Ах эти условные точки останова

Для отладки установил условную точку останова (conditional brakepoint) и при запуске приложения получил сообщение об ошибке:



---------------------------
Microsoft Visual Studio
---------------------------
The following breakpoint cannot be set:


At ..., line 271 character 13 ..., when '...==6660' is true 


The function evaluation requires all threads to run.
---------------------------
OK   
---------------------------


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

Потом я посмотрел на тип стоящий слева от == и увидел что это long (System.Int64), а 6660 конечно же типа int (Int32). Таким образом выражение, которое было написано и проверено в Watch, в точке останова не сработало, ибо там очевидно не используется неявное преобразование типов, характерное для компиляции и для окна Watch.

В общем изменения условия с "...===6660" на "...===6660L" позволило дальше использовать мощные средства Microsoft Visual Studio для отладки.

No comments:

Post a Comment