4

我已经使用 Flex/Flash Builder 几年了,直到今天才发现一些东西。我正在查看一些运行良好的复杂代码,但我需要知道它的行为方式,所以我在其中放置了一个断点,并且看到它抛出了异常。我再次把它拿出来,它运行正常(即使有跟踪语句)。我觉得这很奇怪。

长话短说,经过一番摸索后发现,如果您的代码中有一个 getter,并且在调试过程中,您的变量视图(或表达式视图)会显示 getter 获得的 var,然后 Flash Builder 调试器将运行 getter(静默)以计算变量视图中显示的值。

换句话说,在某些情况下,通过调试您的代码,它可能会运行与您不调试时的运行方式完全不同的路径(它遵循的路径取决于您是否打开了变量视图并显示var 的值)。

这是一个相当严重的缺陷吗?

我一直认为,如果您在调试模式下运行应用程序,它应该运行与不调试时完全相同的代码路径,前提是输入相同(尽管我意识到在围绕事件进行调试时很难复制实时使用失去/获得焦点等的处理程序)。

另一个可怕的事情是调试器会静默调用 getter - 即,如果您在 getter 中有一个断点,那么当调试器调用它来更新变量视图中的 var 值时,它不会停在那里。所以你甚至没有意识到它正在运行吸气剂。

变量视图中的 var 不应该只显示一个null值,直到它的 getter 最终在正常的代码执行过程下运行?

编辑(28/7/11):我原来的帖子说 setter 已经运行,这是错误的 - 它是 getter,如上所述。因此,只有当 getter 中的代码执行超出单纯获取 var 值的附加功能时,这种“缺陷”才存在 - getter 中这样的附加功能对我来说是一种“代码味道”,因此存在原始缺陷,但实际上仅在受污染的代码中

4

0 回答 0