代码之家  ›  专栏  ›  技术社区  ›  taudep

调试Flex框架错误的技术

  •  1
  • taudep  · 技术社区  · 14 年前

    我时不时会遇到Flex框架抛出的异常。通常来自呈现itemrender等的ListBase代码。我正在寻找一些技术来找出哪一个ListBase实例甚至抛出了错误。

    当调用堆栈的顶部起源于callLaterDispatcher()时,困难就出现了

    TypeError: Error #1009: Cannot access a property or method of a null object reference.
        at mx.controls.listClasses::ListBase/addToFreeItemRenderers()
        at mx.controls.listClasses::ListBase/reduceRows()
        at mx.controls.listClasses::ListBase/updateDisplayList()
        at mx.controls.listClasses::TileBase/updateDisplayList()
        at mx.controls.listClasses::ListBase/validateDisplayList()
        at mx.managers::LayoutManager/validateDisplayList()
        at mx.managers::LayoutManager/doPhasedInstantiation()
        at Function/http://adobe.com/AS3/2006/builtin::apply()
        at mx.core::UIComponent/callLaterDispatcher2()
        at mx.core::UIComponent/callLaterDispatcher()
    

    protected function addToFreeItemRenderers(item:IListItemRenderer):void
    {
        // The following item is NULL when the exception is being thrown...
        if (item == null) return;
    
        DisplayObject(item).visible = false;
    
        var factory:IFactory = factoryMap[item];    
    ...
    

    我该怎么弄清楚我需要弄清楚什么?我以前也解决过类似的问题,但我不得不使用魔法和巫毒,猜测并在代码中加入callLater调用来修复。

    2 回复  |  直到 9 年前
        1
  •  0
  •   JeffryHouser    14 年前

    我通常在调试模式下启动应用程序。当错误发生时,调试模式应该接管。

    在调试模式下,您可以:

    1. 添加一个监视变量名或id,它可以告诉您组件的名称,您可以将其绑定到位置。如果您在多个地方使用相同的名称,这可能不是确定的。

        2
  •  1
  •   Orri Scott    13 年前

    我已经用callLater解决了这个问题-执行以下操作。。。 将堆栈的阴暗面转储到跟踪中,以便在出现错误时进行检查。

    希望这有帮助。

    奥里斯科特