Показать сообщение отдельно
Старый 16.02.2012, 13:44   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
! Некорректный код в toString() может привести к появлению "побочных эффектов" при отладке
С коллегой сегодня раскопали занятный глюк: при отладке кода разноски произвольным, казалось бы, образом откатывались транзакции. Поскольку в коде были вложенные транзакции, выглядело это еще более странно: всплывает отладчик, показывает ttsLevel 2, потом через пару шагов отладки - уже 0, потом в коде идет ttsbegin, ttsLevel увеличивается до 1, потом - опять 0. Разобраться помогла трассировка всего этого безобразия - в ходе ее разбора выяснилось, что транзакция откатывалась, когда отладчик вызывал метод toString(), чтобы показать описание объекта в окне Watch. Еще занятно то, что отладчик не может "остановиться", если исключение возникает в ходе того, как он "всплывает" и подготавливает данные для отображения в своем окне. Как результат, отловить такую ошибку в самом отладчике не получалось - никаких ошибок со стеками вызова не показывалось. Так что надо быть очень аккуратным при перекрытии метода toString() и реализации в нем какой-то нетривиальной логики
За это сообщение автора поблагодарили: lev (7), Stitch_MS (3).