Я использую Flex / Flash Builder уже пару лет и только сегодня кое-что обнаружил. Я искал какой-то сложный код, который работал нормально, но мне нужно было знать, как он себя ведет, поэтому я установил в нем точку останова и установил низкое значение, и вот оно вызвала исключение. Я снова вынул его, и он прошел через ОК (даже с инструкциями трассировки). Я думал, что это было странно.
Короче говоря, после долгих размышлений выясняется, что если у вас есть получатель в вашем коде, и в процессе отладки ваше представление переменных (или представление выражений) отображает переменную, которую получает получатель, затем отладчик Flash Builder запустит средство получения (без вывода сообщений), чтобы вычислить значение, отображаемое в представлении переменных.
Другими словами, при определенных обстоятельствах отладка вашего кода может привести к совершенно другому пути к тому, как он будет выполняться, если вы не выполняете отладку (и какой путь следует использовать, зависит от того, открыто ли представление переменных и в нем отображается значение переменной).
Это довольно серьезный недостаток?
Я всегда думал, что если вы запускаете приложение в режиме отладки, оно должно запускать точно такой же путь к коду, который используется, когда не выполняется отладка, при условии, что входные данные идентичны (хотя я понимаю, что при использовании в режиме реального времени может быть довольно сложно копировать использование в реальном времени отладка обработчиков событий для потери / получения фокуса и т. д.).
Другая страшная вещь заключается в том, что отладчик вызывает молча геттер - то есть, если у него есть точка останова, он не остановится, когда отладчик вызовет ее, чтобы обновить значение переменной var в представлении переменных. Таким образом, вы даже не понимаете, что он запускает геттер.
Не следует ли переменной var в представлении переменных просто отображать значение null до тех пор, пока его геттер не будет запущен в нормальном режиме выполнения кода?
Редактировать (28/7/11): В моем первоначальном посте говорилось, что были запущены сеттеры, что неправильно - это геттеры, как описано выше. Таким образом, этот «недостаток» существует только тогда, когда код в геттерах выполняет дополнительную функциональность помимо простого получения значения var - дополнительные функции, подобные этой в геттерах, являются для меня «запахом кода», поэтому оригинальный недостаток существует, но на самом деле только в испорченном коде