我已经使用Flex / Flash Builder几年了,今天才发现了一些东西。我正在查看一些工作正常的复杂代码,但我需要知道它是如何表现的,所以我在其中放置了一个断点并且低,并且看到它抛出异常。我再次把它拿出来然后运行OK(即使有跟踪语句)。我觉得这很奇怪。
简而言之,经过大量的讨论后,如果你的代码中有一个getter,并且在调试过程中你的变量视图(或表达式视图)显示了getter获得的var,然后Flash Builder调试器将运行getter(静默)以计算变量视图中显示的值。
换句话说,在某些情况下,通过调试代码,它可能会运行一个完全不同的路径,如果您没有调试它将如何运行(以及它遵循的路径取决于您是否打开了变量视图和正在显示var的值。)
这是一个非常严重的缺陷吗?
我一直认为如果你在调试模式下运行一个应用程序,它应该运行与不调试时完全相同的代码路径,前提是输入是相同的(尽管我意识到它很难复制实时使用时调试事件处理程序以获得失去焦点等等。)
另一个可怕的事情是调试器默认调用getter - 即如果你在getter中有一个断点,当调试器调用它来更新variables View中的var值时,它就不会停在那里。所以你甚至没有意识到它正在运行吸气剂。
变量视图中的var是否应该只显示 null 的值,直到其getter最终在正常的代码执行过程中运行?
编辑(28/7/11):我的原帖说明了运行的setter,这是错误的 - 它是吸气剂,如上所述。因此,只有当getter中的代码执行超出仅仅获取var值的额外功能时,这种“缺陷”才会存在 - getter中的其他功能对我来说是“代码味道”,因此原始缺陷存在,但实际上仅在受污染的代码中